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


  原文: 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豐富


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM