三种通用应用层协议protobufthriftavro对比,完爆xml,json,http

Posted lnlvinso

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种通用应用层协议protobufthriftavro对比,完爆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丰富






























































以上是关于三种通用应用层协议protobufthriftavro对比,完爆xml,json,http的主要内容,如果未能解决你的问题,请参考以下文章

吃透MIPI接口,你必须了解它这三种PHY规范的区别

2018-2019 1 20165203 实验五 通用协议设计

WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协议编码算法&代码审计

Swift 5:在使用协议实现 Equatable 的结构上实现通用数组操作

TCPIP协议的一切相关

以太网是当今现有局域网采用的最通用的通信协议标准,而TCP/IP协议不是也是应用最广的吗,他们有啥区别呢