定義
跨語言、輕量級、遠程調用框架。通過IDL生成多語言SDK。
架構
- 優勢:thrift對軟件棧的定義非常清晰,使得各個組件間可以松耦合。
- 軟件棧有四層結構:傳輸層、協議層、處理層、服務層
- 傳輸層:負責從網絡中讀取和寫入數據,定義了具體的網絡傳輸方式,如TCP/IP傳輸等;
- 協議層:負責網絡傳輸數據的序列化和反序列化,定義了數據傳輸格式,如JSON、XML、二進制
- 處理層:由具體的IDL生成的,封裝了具體的網絡傳輸和序列化方式,並委託給用戶實現的Handler進行處理
- 服務層:整合上述組件,提供具體的網絡線程/IO服務模型,形成最終的服務
優勢
- 開發速度快
- 根據IDL文件,編譯生成器會自動生成服務端骨架(Skeletons)和客戶端樁(Stubs)。從而省去了維護接口編解碼、網絡傳輸、服務器多線程模型等基礎工作。
- 服務端:根據服務端骨架,開發具體的Handler即可;
- 拷貝IDL定義好的客戶端樁和服務對象,就可以像調用本地方法一樣調用遠端服務。
- 接口維護簡單
- 學習成本低
- 多語言支持
- 穩定/廣泛
數據類型
協議層
- TBinaryProtocol:二進制編碼格式進行數據傳輸
- TCompactProtocol:高效率的、密集的二進制編碼格式進行數據傳輸
- TJSONProtocol: 使用JSON文本的數據編碼協議進行數據傳輸
- TSimpleJSONProtocol:只提供JSON只寫的協議,適用於通過腳本語言解析
傳輸層
- TSocket:使用阻塞式I/O進行傳輸,是最常見的模式
- TNonblockingTransport:使用非阻塞方式,用於構建異步客戶端
- TFramedTransport:使用非阻塞方式,按塊的大小進行傳輸,類似於Java中的NIO
服務端類型
- TSimpleServer:單線程服務器端,使用標準的阻塞式I/O
- TThreadPoolServer:多線程服務器端,使用標準的阻塞式I/O
- TNonblockingServer:單線程服務器端,使用非阻塞式I/O
- THsHaServer:半同步半異步服務器端,基於非阻塞式IO讀寫和多線程工作任務處理
- TThreadedSelectorServer:多線程選擇器服務器端,對THsHaServer在異步IO模型上進行增強
開發指南(轉載)
- 使用原生的Thrift框架,僅需要關注以下四個核心內部接口/類:Iface, AsyncIface, Client和AsyncClient。
- Iface:服務端通過實現HelloWorldService.Iface接口,向客戶端的提供具體的同步業務邏輯。
- AsyncIface:服務端通過實現HelloWorldService.Iface接口,向客戶端的提供具體的異步業務邏輯。
- Client:客戶端通過HelloWorldService.Client的實例對象,以同步的方式訪問服務端提供的服務方法。
- AsyncClient:客戶端通過HelloWorldService.AsyncClient的實例對象,以異步的方式訪問服務端提供的服務方法。