1. 程式人生 > >三種通用應用層協議protobuf、thrift、avro對比,完爆xml,json,http

三種通用應用層協議protobuf、thrift、avro對比,完爆xml,json,http

avr bsp 編譯 通用應用 rift python語言 二進制 code 序列

  原文: https://www.douban.com/note/523340109/

  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對比,完爆xml,json,http