thrift協議

定義

跨語言、輕量級、遠程調用框架。通過IDL生成多語言SDK。

架構

  • 優勢:thrift對軟件棧的定義非常清晰,使得各個組件間可以松耦合。
  • 軟件棧有四層結構:傳輸層、協議層、處理層、服務層
    • 傳輸層:負責從網絡中讀取和寫入數據,定義了具體的網絡傳輸方式,如TCP/IP傳輸等;
    • 協議層:負責網絡傳輸數據的序列化和反序列化,定義了數據傳輸格式,如JSON、XML、二進制
    • 處理層:由具體的IDL生成的,封裝了具體的網絡傳輸和序列化方式,並委託給用戶實現的Handler進行處理
    • 服務層:整合上述組件,提供具體的網絡線程/IO服務模型,形成最終的服務

優勢

  • 開發速度快
    • 根據IDL文件,編譯生成器會自動生成服務端骨架(Skeletons)和客戶端樁(Stubs)。從而省去了維護接口編解碼、網絡傳輸、服務器多線程模型等基礎工作。
    • 服務端:根據服務端骨架,開發具體的Handler即可;
    • 拷貝IDL定義好的客戶端樁和服務對象,就可以像調用本地方法一樣調用遠端服務。
  • 接口維護簡單
  • 學習成本低
  • 多語言支持
  • 穩定/廣泛

數據類型

Thrift的數據類型

協議層

  • 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的實例對象,以異步的方式訪問服務端提供的服務方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章