Thrift
Thrift這是一種接口描述語言佮二進位通訊協議,伊予人用來定義佮創建跨語言的服務。伊予人當做一个遠逝的過程調用(RPC)框架來使用,是由 Facebook 為「大規模跨語言服務開發」開發的。伊通過一个代碼生成 ia̋n-jín 聯合一个軟體棧,來創建無仝程度的、無縫的跨平台高效服務,會用得使用 C #、C + +(是因為 POSIX 兼容系統)、 Cappuccino、Cocoa、Delphi、Erlang、Go、Haskell、Java、Node . js、OCaml、Perl、PHP、Python、Ruby 和 Smalltalk。雖然伊較早是由著 Facebook 開發的,但是伊這馬是 Apache 軟體基金會的開源項目矣。這實現予人描述佇二空空七年四月的一篇由 Facebook 發表的技術論文中,該論文現由 Apache 掌管。
架構
Thrift 包括一套完整的棧來創建客戶捀佮服務端的程序。頂層的部份是由 Thrift 定義生成的代碼。啊若服務著對這个文件客戶捀和處理器代碼生成。佇生成的代碼里會創建無仝款是內建類型的資料結構,並且共做結果共發送。協議佮傳輸層是運行時庫的一部份。有矣 Thrift,就會當定義一个服務抑是改變通訊佮傳輸協議,無需要重新編譯代碼。除了客戶捀的部份以外,Thrift 猶閣包括侍服器基礎設施來集做協議佮傳輸,如實窒起來、非常的阻窒車濟執行緒侍服器。棧中作為 I / O 基礎的部份對無仝款的語言則有無仝款的實現。
Thrift 支持濟通訊協議:
- TBinaryProtocol–一種簡單的二進位格式,簡單,但是無為著空間效率優化。比文本協議處理起來較緊,但是閣較歹做。
- TCompactProtocol–閣較絚的這款二進位的格式,處理起來通常是平懸效。
- TDebugProtocol–一種人類會當讀的文本格式,用來協助調試。
- TDenseProtocol–佮 TCompactProtocol 類似,將傳輸數據的元信息剝離。
- TJSONProtocol–使用 JSON 著數據編碼。
- TSimpleJSONProtocol–一種寫協議,伊袂使予人 Thrift 解析,因為伊使用 JSON 時擲捒元數據。適合用跤本語言來解破。
支持的 _ 傳輸協議 _ 有:
- TFileTransport–該傳輸協議會做文件。
- TFramedTransport–使用一个非阻塞侍服器的時陣,要求使用這傳輸協議。伊按照發送數據,其中每一見的開頭是長度信息。
- TMemoryTransport–使用存儲器影射輸入輸出。(Java 的實現使用一个簡單的 ` ByteArrayOutputStream `。)
- TSocket–使用窒的套接字 I / O 來傳輸。
- TZlibTransport–用 zlib 執行壓縮。用佇連接另外一个傳輸協議。
Thrift 猶閣提供濟濟的侍服器,包括講:
- TNonblockingServer–一个濟執行緒侍服器,伊使用非常的阻塞 I / O(Java 的實現使用了 NIO 巷路)。 TFramedTransport 著愛來佮這个侍服器配套使用。
- TSimpleServer–一个單執行緒侍服器,伊使用標準的阻塞 I / O。試的時陣真有路用。
- TThreadPoolServer–一个濟執行緒侍服器,伊使用標準的阻塞 I / O。
優點
Thrift 一寡已經明確的優點包括:
- 佮一寡替代選擇,比如講 SOAP 相比並,跨語言序列化的代價閣較低,因為伊使用二進位格式。
- 伊有一个閣瘦閣清氣的庫,無編碼框殼,無咧 XML 配置文件。
- 縛定感覺足自然的。比如講,Java 使用 ` java . util . ArrayList < String > `;C + + 使用 ` std : : vector < std : : string > `。
- 應用層通訊格式和序列化層通訊格式是完全分離的。𪜶攏會當獨立修改。
- 預定義的序列化格式包括:二進位格式、著 HTTP 友好的格式,猶閣有收牢的二進位格式。
- 兼做跨語言文件序列化。
- 協議使用軟版本號機制軟體版本管理。Thrift 無要求一个中心化的和顯式的版本號機制,譬如講主版本號 / 次版本號。鬆保存的團隊會使輕鬆控制 RPC 調用的演進。
- 無構建依賴嘛無含非標準化的軟體。不存在無兼用的軟體許可證混用的狀況。
創建一个 Thrift 服務
Thrift 由 C + + 編寫,會當為濟濟的語言創建代碼。欲創建一个 Thrift 服務,著愛寫一寡 Thrift 文件來講伊,為目標語言生成代碼,而且閣寫一寡代碼來啟動侍服器佮對客戶捀調用伊。下跤就是一个按呢的描述文件的代碼示例:
Thrift 欲由這个描述信息生成獨立的代碼。比如講,佇咧 Java 里,` PhoneType ` 將是 ` Phone ` 類中一个簡單的 ` enum `。
參見
- 數據序列化格式較
- Apache Avro
- ASN . 一(抽象語法標記一)
- Caucho 的 Hessian
- Google 的 Protocol Buffers
- 外部的數據表示法
- ZeroC 的 ICE
- SDXF(結構化數據交換格式)
參考文獻
外部連結
- 官方網站(英文)
- Thrift:欠失的指南(英文)
- Thrift 狗蟻任務(英文)
- Thrift 教示講(英文)