Thrift
Apache軟件 | |
0.9.3(2015 | |
Apache | |
thrift |
Thrift
架 構
[Thrift
Thrift
- TBinaryProtocol – 一種簡單的二進制格式,
簡單 ,但 沒 有為 空間 效率 而優化 。比 文 本 協議 處理 起 來 更 快 ,但 更 難 於調 試 。 - TCompactProtocol –
更 緊湊的 二 進 制 格式 ,處理 起 來 通常 同樣 高 效 。 - TDebugProtocol – 一種人類可讀的文本格式,
用 來 協 助 調 試 。 - TDenseProtocol –
與 TCompactProtocol類似 ,將 傳 輸數據 的 元信 息 剝離。 - TJSONProtocol –
使用 JSON對數 據 編 碼。 - TSimpleJSONProtocol –
一 種 只 寫 協議 ,它不能 被 Thrift解析 ,因 為 它使用 JSON時 丟棄了 元 數 據 。適合 用 腳本語 言 來 解析 。[8]
- 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
enum PhoneType {
HOME,
WORK,
MOBILE,
OTHER
}
struct Phone {
1: i32 id,
2: string number,
3: PhoneType type
}
ThriftPhoneType
Phone
enum
。
參 見
[數 據 序列 化 格式 比較 - Apache Avro
- ASN.1(
抽象 語法 標記 一 ) - Caucho
的 Hessian - Google
的 Protocol Buffers 外部 數 據 表示法 - ZeroC
的 ICE - SDXF(
結構 化 數 據 交換 格式 )
參考 文獻
[- ^
安 装 和 使用 Java下 的 Apache Cassandra第 4部分 (Thrift客 户端). http://www.sodeso.nl/: Sodeso–軟件開發 解決 方案 . [2011-03-30]. (原始 內容存 檔於2010-08-15).Thrift
(是 一 個 獨立 的 Apache項目 ,簡單 地 說 ,就是一 種 二 進 制 通 訊協議 。英文 ) - ^ Andrew Prunicki. Apache Thrift:
介 绍. http://www.ociweb.com/:對象 計算 有限 公司 –一家 開放 解決 方案 公司 . [2011-04-11]. (原始 內容存 檔於2011-07-23).
(通過 一種簡單且直截了當的接口定義語言(IDL),Thrift允許 你定義和 創建 一 種 服務 ,這種服務 既 可 以用多種 語 言 來 實現 ,又 可 以由多種 語 言 來 使用 。利用 代 碼生成功 能 ,Thrift可 以創建 一 套文件 ,然 後 通過 這套文 件 來 創建 服務 端 和 客 戶 端 程 序 。除 了 互操作性 之 外 ,Thrift還 非常 高 效 ,這得益 於一套獨特 的 、在 時間 和 空間 上 都 高 效 的 序列 化 機 制 。英文 ) - ^ Thrift
的 要求 (頁 面 存 檔備份,存 於互聯網 檔案館 ),要 支持 Windows參 見 這裏 (頁 面 存 檔備份,存 於互聯網 檔案館 )(英文 ) - ^ Fred Potter,
使用 Thrift + Cappuccino (頁 面 存 檔備份,存 於互聯網 檔案館 ),parallel48的 甜美的 郵件博 客 ,2010年 6月 10日 。(英文 ) - ^ Andrew Prunicki. Apache Thrift:
代 码生成 . http://www.ociweb.com/:對象 計算 有限 公司 –一家 開放 解決 方案 公司 . [2011-04-12]. (原始 內容存 檔於2011-07-23).Thrift
(在 不同 程度 上 支持 許多 語 言 ,完 整 的 名 單 如下:(請小心 ,不能 僅僅 因 為 你的語 言 在 某 種 程度 上 被 支持 ,就假設 它支持 所有 的 Thrift特性 。比 如Python,僅支持 TBinaryProtocol。)Cocoa、C++、C#、Erlang、Haskell、Java、OCaml、Perl、PHP、Python、Ruby和 Smalltalk。英文 ) - ^ Mark Slee、Aditya Agarwal、Marc Kwiatkowski,Thrift:
大 規模 跨 語 言 服務 的 實現 (頁 面 存 檔備份,存 於互聯網 檔案館 )(英文 ) - ^ 7.0 7.1 Andrew Prunicki. Apache Thrift:
介 绍. http://www.ociweb.com/:對象 計算 有限 公司 –一家 開放 解決 方案 公司 . [2011-04-11]. (原始 內容存 檔於2011-07-23).該棧
(的 頂 層 部分 是 從 你的Thrift定義 文 件 生成 的 代 碼。Thrift服務 在 生成 的 客 戶 端 和 處理 器 代 碼中提供 結果 。在 圖 中 ,這些是 用 棕色框 表示 的 。被 發送 的 數 據 結構 (不同 於內建 類型 )也由生成 的 代 碼產生 。這些結果 由 紅色 框 表示 。通 訊和傳 輸協議 是 Thrift運行 時 庫 的 一 部分 。因 此,用 Thrift,你可以定義 一 個 服務 ,並 可 以自由 地 改變 通 訊和傳 輸協議 ,而無需重新 生成 你的代 碼。Thrift還 包括 一個伺服器基礎設施,以集成 各個 通 訊和傳 輸協議 。它支持 阻塞、非 阻塞、單線 程 以及多 線 程 伺服器 。棧中「作為 I/O基礎 」的 部分 則 是 因 語 言 而異的 。對 於Java和 Python網 絡 I/O,Thrift庫 對 其內建 庫 起 到 了 槓桿作用 ,而C++的 實現 使用 了 它自己 的 習慣 。英文 ) - ^ Skelton, Steven. 对开发者
友好 的 Thrift请求日 志 . [2014年 7月 3日 ]. (原始 內容存 檔於2014年 7月 14日 ).(英文 )
外部 連結
[官 方 網 站(英文 )- Thrift:
缺 失 的 指南 (頁 面 存 檔備份,存 於互聯網 檔案館 )(英文 ) - Thrift螞蟻
任務 (頁 面 存 檔備份,存 於互聯網 檔案館 )(英文 ) - Thrift
指導 (頁 面 存 檔備份,存 於互聯網 檔案館 )(英文 )