Apache Thrift系列(一):Thrift基本及IDL語法

 

一、Thrift介紹

  Thrift是一個輕量級、跨語言的遠程服務調用框架,最初由Facebook開發,後面進入Apache開源項目。主要包含三大部分:代碼生成序列化框架RPC框架,相當於protoc + protobuffer + grpc,並且支持大量語言(C++、Go、JavaPythonPHPRuby等),是一套全棧式的RPC解決方案。整體架構圖:

 

二、Thrift的數據類型及IDL語法

 thrift支持數據類型

基本類型:

  • bool: 布爾值
  • byte: 8位有符號整數
  • i16: 16位有符號整數
  • i32: 32位有符號整數
  • i64: 64位有符號整數
  • double: 64位浮點數
  • string: UTF-8編碼的字符串
  • binary: 二進制串

結構體類型:

  • struct: 定義的結構體對象

容器類型:

  • list: 有序元素列表
  • set: 無序無重複元素集合
  • map: 有序的key/value集合

異常類型:

  • exception: 異常類型

服務類型:

  • service: 具體對應服務的類

除此之外,Thrift 還支持枚舉類型(enum)和常量類型(const)

IDL語法參考:

 

三、通訊協議及序列化協議

  Thrift可以讓用戶選擇客戶端服務端之間傳輸通信協議的類別,在傳輸協議上總體劃分爲文本(text)和二進制(binary)傳輸協議,主要有BinaryProtocol、CompactProtocol、JsonProtocol、MultiplexedProtocol,一般實現RPC最常用協議BinaryProtocol和CompactProtocol。常用協議有以下幾種:

  • TBinaryProtocol:二進制編碼格式進行數據傳輸
  • TCompactProtocol:高效率的、密集二進制編碼格式進行數據傳輸
  • TJSONProtocol: 使用JSON文本的數據編碼協議進行數據傳輸
  • TSimpleJSONProtocol:只提供JSON只寫的協議,適用於通過腳本語言解析
 上面是RPC通訊協議,序列化協議Thrift實現主要是Binary、Compact、JSON,可以理解通訊協議裏面包含了序列化協議。
 
 

 四、Thrift 網絡棧

Thrift 網絡棧主要包含四部分:
  • Server
    • 創建 transport
    • 爲 transport 創建一個輸入/輸出 protocol
    • 基於 輸入/輸出 protocol 創建一個 processor
    • 等待連接並處理
  • Processor
    • 從輸入流讀取數據並寫到輸出流
  • Protocol
    • 協議層可以理解爲主要負責序列化和反序列化,是與 Proto Buf 可類比的層
    • 常用的有 binary、compact:
  • Transport
    • 通常使用基於 Raw TCP 的傳輸協議,包括 Buffered 和 Framed 的;
    • 一般包含打開鏈接、關閉鏈接、讀寫數據、監聽鏈接等接口和功能;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章