【转】三种通用应用层协议protobuf、thrift、avro对比

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

Google protobuf:
优点

    二进制消息,性能好/效率高(空间和时间效率都很不错)
    proto文件生成目标代码,简单易用
    序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)
    支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级
    支持多种语言(可以把proto文件看做IDL文件)
    Netty等一些框架集成

缺点

    官方只支持C++,JAVA和Python语言绑定(注:Proto3已支持更多语言,包括C#, php,Objective-C,java-script,Go,dart)
    二进制可读性差(貌似提供了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丰富

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值