thrift和avro都提供rpc服务和序列化,而protocolbuffer只是提供序列化功能
Avro是强调一种高效的序列化,标准性的云计算的数据交换和存储的Protocol
Avro的创新之处在于融合了显式,declarative的Schema和高效二进制的数据表达,强调数据的自我描述,克服了以往单纯XML或二进制系统的缺陷。Avro对Schema动态加载功能,是Thrift编程接口所不具备的,符合了Hadoop上的Hive/Pig及NOSQL 等既属于ad hoc,又追求性能的应用需求.

Schema处理:
   a、thrift依赖IDL-->代码的生成,静态的。走代码生成,编译载入的流程。
   b、可以生成代码,后编译执行,但是还必须依赖IDL(meta元数据描述);也可以走动态解释执行IDL
序列化的方式:
   a、thrift
        提供多种序列化实现,TCompactProtocol,TBinaryProtocol
        每个Field前面都是带Tag的,这个Tag用于标识这个域的类型和顺序ID(IDL中定义,用于Versioning)。在同一批数据里面,这些Tag的信息是完全相同的,当数据条数大的时候这显然就浪费了。
      
   b、Avro,格式包括--》文件头中有schema+数据records(自描述)
       
         只对感兴趣的部分反序列化
         schema允许定义数据的排序order
         采用block链表结构,突破了用单一整型表示大小的限制。比如Array或Map由一系列Block组成,每个Block包含计数器和对应的元    素,计数器为0标识结束。

RPC的服务:
  a、 Avro提供了

        HttpServer : 缺省,基于Jetty内核的服务.

        NettyServer: 新的基于Netty的服务.

  b、Thrift提供了:

        TThreadPolServer: 多线程服务

        TNonBlockingServer: 单线程 non blocking的服务

        THsHaServer: 多线程 non blocking的服务



总结:
  • Thrift适用于程序对程序静态的数据交换,要求schema预知并相对固定
  • Avro在Thrift基础上增加了对schema动态的支持且性能上不输于Thrift
  • Avro显式schema设计使它更适用于搭建数据交换及存储的通用工具和平台,特别是在后台
  • 目前Thrift的优势在于更多的语言支持和相对成熟
  • PB具有跨平台、解析速度快、序列化数据体积小、扩展性高、使用简单的特点,但是内嵌并没有提供RPC的通讯
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐