Thrift 和 Protobuf
介紹
有 Facebook 開發的遠端服務呼叫框架採用介面描述語言定義並建立服務,支援可擴充的跨語言服務開發,所包含的程式碼生成引擎尅一在多種語言中,如 C++,Java,Pyhon,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,Smalltalk 等建立搞笑的、無縫的服務,其傳輸資料採用二進位制格式,相對 XML 和 JSON 體積更小,對於高併發、大資料量和多語言的環境更有優勢。
Thrift 架構
圖中黃色部分是使用者實現的業務邏輯,褐色部分是根據 Thrift 定義的服務介面描述檔案生成的客戶端和伺服器端程式碼框架,紅色部分是根據 Thrift 檔案生成程式碼實現資料的讀寫操作。紅色部分以下是 Thrift 的傳輸體系、協議以及底層 I/O 通訊,使用 Thrift 可以很方便的定義一個服務並且選擇不同而傳輸協議和傳輸層而不用重新生成程式碼。
優缺點
優點
- One-stop shop,相對於 protobuf,序列化和 RPC 支援一站式解決,如果是 protobuf,還需要考慮 RPC 框架。
protobuf
google 開源的一個專案,主要用於資料儲存、傳輸協議格式等場合。也是一個二進位制協議,主要用來序列化。
- 特性豐富
- RPC 和序列化效能不
- 有很多開源專案的周邊支援 都是 thrift
...
缺點
- 沒有官方文件
- Thrift 序列化二進位制不可讀,除錯相對困難
- Thrift 的序列化和框架緊耦合,無法支援向持久層直接讀寫資料,所以不適合做資料持久化協議
- RPC 在 0.6.1 升級到 0.7.0 是不相容的
- buf fix 和更新不積極,維護成本過高
...
Thrift 和 Protobuf 運用場景
Thrift
對於需求為高效能,分散式的 RPC 服務,Thrift 支援眾多語言和豐富的資料型別,並對於資料欄位的增刪具有較強的相容性,所以非常適合公司內部 SOA 的標準 RPC 框架
Protobuf
Protobuf 具有廣泛的使用者基礎,空間開銷小一級高解析性是其亮點,非常適合於公司內部的對效能要求高的 RPC 呼叫。Protobuf 提供了標準的 IDL 以及對應編譯器,其 IDL 檔案是參與各方的非常強的業務約束,另外,Protobuf 與傳輸層無關,採用 Http 具有良好的跨防火牆的訪問屬性。由於其解析效能好,序列化後資料量相對少,非常適合應用層物件的持久化場景。
IDL 介面描述語言
Interactive Data Language
這是一種描述語言,也是一箇中間語言,IDL 一個使命就是規範和約束,規範使用型別,提供跨語言特性。通過工具分析 IDL 檔案,生成各種語言程式碼
相關文章
- protobuf和gRPCRPC
- Thrift RPC 系列教程(1)——Thrift語言RPC
- Apache Thrift 配置環境和執行(Linux)ApacheLinux
- thrift with Go (0.11.0)Go
- Thrift原理分析(二)協議和編解碼協議
- google protobuf的原理和思路提煉Go
- Mac 安裝thriftMac
- Thrift RPC Client 流程RPCclient
- Protobuf
- client: c#+protobuf, server: golang+protobufclientC#ServerGolang
- Thrift RPC新增access logRPC
- ubuntu下安裝thriftUbuntu
- Thrift IDL 快速入門
- Thrift RPC 通訊搭建RPC
- protobuf jsonJSON
- protobuf 生成 Go 程式碼外掛 gogo/protobufGo
- google protocol buffer——protobuf的基本使用和模型分析GoProtocol模型
- JMeter 測試 thrift RPC 介面JMeterRPC
- Thrift的網路堆疊
- protobuf進階
- protobuf的使用
- Protobuf簡介
- Protobuf入門
- protobuf、LRU、sigleflight
- google protocol buffer——protobuf的問題和改進2GoProtocol
- 如何使用thrift 服務引擎元件元件
- Thrift原理分析(一)基本概念
- Spring Boot 中使用 thrift 入門Spring Boot
- RPC框架實踐之:Apache ThriftRPC框架Apache
- windows下編譯安裝thriftWindows編譯
- xlua - 增加protobuf庫
- GRPC之protobuf理解RPC
- Protobuf 語言指南
- Protobuf 編碼指南
- php 中使用 protobufPHP
- java中使用protobufJava
- python 安裝protobufPython
- 谷歌的grpc和facebook的相比thrift 有哪些優勢,又有哪些缺點?谷歌RPC