Avro,Thrift,Gb 三种协议

thrift :是由 Facebook 主导开发的一个跨平台、支持多语言的,通过定义 IDL 文件,自动生成 RPC 客户端与服务端通信代码的工具,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码并由生成的代码负责RPC协议层和传输层的实现。

Thrift是 由Facebook开源的一个RPC框架,用来进行可扩展且跨语言的服务的开发,使得各种编程语言间无缝结合的、高效的服务。我们依据Thrift的规范 简单定义访问接口,通过Thrift编译器编译生成各种编程语言代码,实现各种语言模块之间的高效互访问,速度比Google的Protocol Buffers还要快。Thrift可以说它是现在最优秀的分布式通信机制,实现了在大型分布式集群中各独立模块之间的高效协同

protocol buffer 是一种序列化与结构化数据的一种机制,具有跨平台、解析速度快、序列化数据体积小、扩展性高、使用简单的特点。

Apache Avro 是一个二进制的数据序列化系统。实际上 Avro 除了序列化之外,像 MP 一样也提供了远程调用( RPC )功能。 Avro 是属于 Hadoop 的一个子项目,由 Hadoop 的 创始人 Doug Cutting 牵头开发,设计用于支持大批量数据交换的应用,依赖模式 (Schema) 来实现数据结构定义,模式由 JSON 对象来表示, Avro 也被作为一种 RPC 框架来使用。客户端希望同服务器端交互时,就需要交换双方通信的协议,它类似于模式,需要双方来定义,在 Avro 中被称为消息 (Message) 。通信双方都必须保持这种协议,以便于解析从对方发送过来的数据,这也就是传说中的握手阶段。

 

性能对比 由于thrift功能较protobuf丰富,因此单从序列化机制上进行性能比较,手机html制作按照序列化后字节数、序列化时间、反序列化时间三个指标进行对thrift的二进制、压缩、protobuf三种格式进行对比发现:Protobuf序列化后的字节数较少,符合w3c标准而且序列化和反序列化的时间也较短.

protocol buffer 是一种序列化与结构化数据的一种机制,具有跨平台、解析速度快、序列化数据体积小、扩展性高、使用简单的特点.

  protobuf thrift 功能特性 主要是一种序列化机制 提供了全套RPC解决方案,包括序列化机制、传输层、并发处理框架等 支持语言 C++/Java/Python C++,易用性 语法类似,使用方式等类似 生成代码的质量 可读性都还过得去,网页外包接活执行效率另测 升级时版本兼容性 均支持向后兼容和向前兼容 学习成本 功能单一(不适合复杂应用)容易学习 功能丰富、学习成本高 文档&社区 官方文档较为丰富,protocol buffer有2000W+结果,google group被墙不能访问 官方文档较少,没有API文档,google搜索apache thrift仅40W结果,web前端报价邮件列表不怎么活跃

Apache Avro 是一个二进制的数据序列化系统.实际上 Avro 除了序列化之外像 MP 一样也提供了远程调用( RPC )功能. Avro 是属于 Hadoop 的一个子项目,由 Hadoop 的 创始人 Doug Cutting 牵头开发设计用于支持大批量数据交换的应用依赖模式 (Schema) 来实现数据结构定义模式由 JSON 对象来表示,Avro 也被作为一种 RPC 框架来使用.客户端希望同服务器端交互时就需要交换双方通信的协议,它类似于模式需要双方来定义,在 Avro 中被称为消息 (Message) .通信双方都必须保持这种协议,以便于解析从对方发送过来的数据,符合w3c标准这也就是传说中的握手阶段.

对比三种框架首推的应该是thrift,因为其不仅有对于协议封装和解析的处理,、而且有完备的通讯框架的实现,完全封装了底层通讯,对于使用者,只要在框架的客户端和服务器接口回调中处理逻辑就可以了.

Google protobuf:

优点

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

缺点

  • 官方只支持C++,JAVA和Python语言绑定
  • 二进制可读性差(貌似提供了Text_Fromat功能)
  • 二进制不具有自描述特性
  • 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
  • 只涉及序列化和反序列化技术,不涉及RPC功能(类似XML或者JSON的解析器)

Apache Thrift:

应用

优点

  • 支持非常多的语言绑定
  • thrift文件生成目标代码,简单易用
  • 消息定义文件支持注释
  • 数据结构与传输表现的分离,支持多种消息格式
  • 包含完整的客户端/服务端堆栈,可快速实现RPC
  • 支持同步和异步通信

缺点

  • 和protobuf一样不支持动态特性

Apache Avro:

应用

优点

  • 二进制消息,性能好/效率高
  • 使用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、付费专栏及课程。

余额充值