您好,登錄后才能下訂單哦!
本篇內容主要講解“thrift原理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“thrift原理是什么”吧!
簡介
Thrift是一款Facebook開發的rpc框架( remote procedure call),并且已經加入到Apache項目。
Thrift是采用二進制編碼協議,使用TCP/IP傳輸協議的一種RPC實現,而XML-RPC/JSON-RPC/SOAP與WSDL協議棧采用文本協議,WSDL的實現WebService采用HTTP作為傳輸協議,對于網絡數據傳輸,TCP/IP協議的性能要高于HTTP協議,不僅因為HTTP協議是應用層協議,HTTP協議傳輸內容除了應用數據本身之外,還有響應狀態碼、Header信息等。
RPC介紹
可以用一張圖體現:
Thrift工作流程
設計所需要的服務
根據設計的服務,編寫Thrift IDL服務描述文件
根據編寫的Thrift IDL服務描述文件使用Thrift提供的代碼生成工具生成服務端與客戶端的代碼
實現服務端業務邏輯的編寫,同時實現客戶端調用代碼的編寫
運行服務端與客戶端
Thrift內部運行
Thrift運行時的網絡堆棧包括Transport、Protocol、Processor、Server四個部分。如下圖所示:
Transport
Transport:提供了通過網絡讀寫數據的方法;
Thrift 源碼中,則是通過將 socket 包裝成各種 Transport 來使用
java實現方式:
a、TSocket與TIOStreamTransport基于阻塞I/O模型;
b、TnonblockingTransort、TNonblockingSocket基于非阻塞模型;
c、TMemoryInputTransport、TMemoryBuffer基于字節數組作為輸入輸出流的封裝;
d、TFastFramedTransport是內存利用率更高的一個內存讀寫緩存區,它使用自動增長的byte[](長度不夠才新建),而不是每次都新建一個byte[],提高了內存使用率;
Protocol
Transport:提供了對網絡傳輸數據進行序列化/反序列化的具體實現
java實現方式:
a、TbinaryProtocol:二進制格式傳輸協議
b、TCompactProtocol:壓縮二進制格式傳輸協議
c、TJSONProtocol:JSON格式傳輸協議
d、TSimpleJSONProtocol:簡單的JSON格式數據傳輸協議
e、TDebugProtocol:調試時使用的文本傳輸協議
protocol 就是 transport 的上一層。 transport 負責數據傳輸, 但是要使得程序知道傳輸的數據具體是什么, 還得靠 protocol 這個組件來對數據進行解析, 解析成對應的結構代碼供程序直接調用。
Processor
Thrift通過使用編寫的Thrift IDL描述文件來自動生成Processor,它從負責輸入的Protocol讀取數據,將其傳遞給處理程序,并將結果發送到負責輸出的Protocol。
Processor:通過 transport 和 protocol 這兩層之后, 程序已經可以獲得對應的數據結構,但是數據結構需要被使用才有價值。 在 Thrift 里面,就是被 processor調用。
Server
Server將Transport、Protocol、Processor組合在一起,將服務運行起來,在指定的端口等待調用端的請求
java實現方式:
a、TnonblockingServer:基于多線程非阻塞I/O模型實現,適用于連接數較多的高并發環境
b、TthreadPoolServer:基于多線程阻塞I/O模型實現,比TNonblockingServer需要耗費更多的系統資源
c、ThsHaServer:半同步、異步服務器
d、TsimpleServer:基于單線程的阻塞I/O模型實現,主要用于測試,不推薦在生產環境中使用
Client
一個同步調用的客戶端Client,一個異步調用的客戶端AsyncClient
Thrift數據類型
Thrift實現方式
IDL描述性語言:當數據結構發生變化時,必須重新編輯IDL文件并生成相應的代碼
基于注解的方式
service <-> @ThriftService注解service類 @ThriftMethod注解該類中的方法
struct <-> @ThriftStruct 注解model類 @ThriftField注解該類中的getter方法
enum <-> @ThriftEnumValue 注解enum
到此,相信大家對“thrift原理是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。