三种通用应用层协议protobuf、thrift、avro对比
Google protobuf:
優點
????二進制消息,性能好/效率高(空間和時間效率都很不錯)
????proto文件生成目標代碼,簡單易用
????序列化反序列化直接對應程序中的數據類,不需要解析后在進行映射(XML,JSON都是這種方式)
????支持向前兼容(新加字段采用默認值)和向后兼容(忽略新加字段),簡化升級
????支持多種語言(可以把proto文件看做IDL文件)
????Netty等一些框架集成
缺點
????官方只支持C++,JAVA和Python語言綁定
????二進制可讀性差(貌似提供了Text_Fromat功能)
????二進制不具有自描述特性
????默認不具備動態特性(可以通過動態定義生成消息類型或者動態編譯支持)
????只涉及序列化和反序列化技術,不涉及RPC功能(類似XML或者JSON的解析器)
Apache Thrift:
應用
????Facebook的開源的日志收集系統(scribe: https://github.com/facebook/scribe)
????淘寶的實時數據傳輸平臺(TimeTunnel http://code.taobao.org/p/TimeTunnel/wiki/index)
????Evernote開放接口(https://github.com/evernote/evernote-thrift)
????Quora(http://www.quora.com/Apache-Thrift)
????HBase( http://abloz.com/hbase/book.html#thrift )
????…
優點
????支持非常多的語言綁定
????thrift文件生成目標代碼,簡單易用
????消息定義文件支持注釋
????數據結構與傳輸表現的分離,支持多種消息格式
????包含完整的客戶端/服務端堆棧,可快速實現RPC
????支持同步和異步通信
缺點
????和protobuf一樣不支持動態特性
Apache Avro:
應用
????Hadoop RPC (http://hadoop.apache.org/#What+Is+Apache+Hadoop%3F)
優點
????二進制消息,性能好/效率高
????使用JSON描述模式
????模式和數據統一存儲,消息自描述,不需要生成stub代碼(支持生成IDL)
????RPC調用在握手階段交換模式定義
????包含完整的客戶端/服務端堆棧,可快速實現RPC
????支持同步和異步通信
????支持動態消息
????模式定義允許定義數據的排序(序列化時會遵循這個順序)
????提供了基于Jetty內核的服務基于Netty的服務
缺點
????只支持Avro自己的序列化格式
????語言綁定不如Thrift豐富
總結
以上是生活随笔為你收集整理的三种通用应用层协议protobuf、thrift、avro对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Mvc Url和参数名称忽
- 下一篇: TransmittableThreadL