啓示錄
對於異構系統的思考
Thrift,二進制,基於Http協議高性能,但只是解決通信問題
異構:如果理解成不同語音不同框架
那整合就不能只考慮通信,還要思考負載均衡、熔斷器、服務發現
淺談Thrift
1.概述
Apache Thrift是一個多語言並存的異構系統之間的RPC調用方案,當然也可以作爲同構系統之間的RPC方案。
2.優勢
對比XML-RPC/JSON-RPC/SOAP與WSDL協議棧實現的RPC方案,有着非常明顯的性能優勢,原因在於,Thrift是採用二進制編碼協議,使用TCP/IP傳輸協議的一種RPC實現,而XML-RPC/JSON-RPC/SOAP與WSDL協議棧採用文本協議,WSDL的實現WebService採用HTTP作爲傳輸協議,對於網絡數據傳輸,TCP/IP協議的性能要高於HTTP協議,不僅因爲HTTP協議是應用層協議,HTTP協議傳輸內容除了應用數據本身之外,還有響應狀態碼、Header信息等。
3.執行流程
Transport:數據傳輸層
1.TSocket與TIOStreamTransport基於阻塞I/O模型實現,每次請求獨佔一個連接,效率比較低
2.TnonblockingTransort、TNonblockingSocket這兩個類對應着非阻塞I/O實現。
3.TMemoryInputTransport封裝了一個字節數組byte[]來做輸入流的封裝,TMemoryBuffer使用字節數組輸出流ByteArrayOutputStream做輸出流的封裝
4.TFramedTransport則封裝了TMemoryInputTransport做輸入流,封裝TByteArrayOutPutStream做輸出流,作爲內存讀寫緩存區的一個封裝
5.TFastFramedTransport是內存利用率更高的一個內存讀寫緩存區,它使用自動增長的byte,而不是每次都新建一個byte[],提高了內存使用率
Protocol:數據傳輸協議
1.TbinaryProtocol:二進制格式傳輸協議
2.TCompactProtocol:壓縮二進制格式傳輸協議
3.TJSONProtocol:JSON格式傳輸協議
4.TSimpleJSONProtocol:簡單的JSON格式數據傳輸協議
5.TDebugProtocol:調試時使用的文本傳輸協議
Processor:處理器
Thrift通過使用編寫的Thrift IDL描述文件來自動生成Processor,它從負責從輸入的Protocol讀取數據,將其傳遞給處理程序,並將結果發送到負責輸出的Protocol
其他
PHP用Sidecar模式可以添加註冊中心,解決負載調用