thrift由facebook出品,protobuffer由google出品;
下面对比一下这两个的区别。参考:http://zhidao.baidu.com/link?url=yNLBeHhWokfwB677UZHoyv4vLyPOZEEQypUMiX__YIhp5E7UmpvIWTArKPMab32xj5gkRo4a6CXoZ1nxore82kXyOzfXdaRRhOAPynxYmB7
1)Thrift: 支持的语言更广泛一些c++, java, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php
protobuf 目前还是只支持c++, java, python
2)Thrift提供的功能更丰富一些: Thrift提供了简单的RPC构架(其实不简单了, block, nonblock的都有了…..)
protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。
3)Thrift支持多种协议格式. Thrift的代码实现,有专门的TProtocol和TTransport抽象,相互配合,可以实现多种协议,方便集成各种传输方式。至少目前Thrift就能使用json作为序列化协议。
protobuf只安心一种协议,并下决心把这个格式做好。输入输出也是标准的stream.
4)thrift目前不支持Windows平台
protobuf没有这个问题,提供了visual studio的项目文件,可以很顺利的在windows平台下编译。
5)thrift侧重点是构建夸语言的可伸缩的服务,特点就是支持的语言多,同时提供了完整的rpc service framework,可以很方便的直接构建服务,不需要做太多其他的工作。
相同点:
数据类型相对固定的情况下,不论是thrift还是protobuf都会比直接处理xml要方便很多
常用的跨语言通信方案:
- 基于SOAP消息格式的WebService
- 基于JSON消息格式的RESTful 服务
以上两种方案的弊端:
- XML体积太大,解析性能极差
- JSON体积相对较小,解析相对较快,但表达能力较弱
现在比较流行的跨语言通信方案:
- Google protobuf (http://code.google.com/p/protobuf)
- Apache Thrift (http://thrift.apache.org/)
- Apache Avro (http://avro.apache.org/)
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:
应用
- 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:
应用
优点
- 二进制消息,性能好/效率高
- 使用JSON描述模式
- 模式和数据统一存储,消息自描述,不需要生成stub代码(支持生成IDL)
- RPC调用在握手阶段交换模式定义
- 包含完整的客户端/服务端堆栈,可快速实现RPC
- 支持同步和异步通信
- 支持动态消息
- 模式定义允许定义数据的排序(序列化时会遵循这个顺序)
- 提供了基于Jetty内核的服务基于Netty的服务
缺点
- 只支持Avro自己的序列化格式
- 语言绑定不如Thrift丰富
相关推荐
protobuf(Protocol Buffers)、thrift和avro是三种广泛使用的序列化框架,它们在分布式系统、网络通信以及数据存储中扮演着重要角色。这个名为"protobuf/thrift/avro-序列化性能测试工程"的项目专注于对比这三种...
本篇文章将对几种常见的RPC框架进行比较分析,包括Protobuf RPC、Avro和Thrift,探讨它们的特点、优缺点以及适用场景。 1. Protobuf RPC(Protocol Buffers Remote Procedure Call) - **Protobuf** 是Google开发...
Avro与Protobuf、Thrift等序列化工具相比,更强调Schema,这使得其在数据交换和数据持久化方面有优势。而与JSON相比,Avro的数据文件通常更小,读写速度更快。 7. **集成与使用** Avro可以方便地集成到各种Hadoop...
- **与 Thrift 和 Avro 比较**: Thrift 和 Avro 也是高效的序列化框架,但protobuf提供了更简洁的接口,且编译器支持更多语言。 **protobuf在实际项目中的应用** - **网络通信**: 用于服务器间、客户端与服务器间...
3. **与Thrift和Avro相比**: Protobuf提供了简单易用的接口,而Thrift和Avro更注重服务间的RPC(远程过程调用)。 **四、Protobuf的扩展与应用** 1. **gRPC**: Google推出的基于HTTP/2的高性能RPC框架,使用...
2. **Apache Thrift**:Thrift是一个跨语言的服务开发框架,它允许定义数据类型和服务接口,然后生成能够在各种语言之间进行通信的代码。Thrift提供了一种高效的二进制传输协议,类似于protobuf,但更加强调服务层的...
源码生成通过指定格式的文本文件进行解析生成以及序列化和反序列化技术:avro|thrift|protobuf 一、avro技术 1.maven配置 <avro>1.8.2</avro> <groupId>org.apache.avro <artifactId>avro-tools ${avro.version}...
BaijiSerializer4J 是一个专为 Java 平台设计的序列化库,其设计理念受到了 Apache Avro 和 Apache Thrift 的启发。这两个开源项目都是为了解决跨语言数据交换的问题,提供了高效的序列化和反序列化机制。...
Avro不仅在Java中使用,还支持C++, Python等多种语言,使得跨语言通信变得容易。 4. Thrift:Thrift是由Facebook开发的另一个跨语言的序列化和RPC框架。它允许定义服务接口和数据结构,然后生成不同语言的客户端和...
此外,还有多种序列化库,如Kryo、FST、JSON、XML、protobuf、Hessian、Avro和Thrift,它们各有优缺点,适用于不同的场景。 HTTP和HTTPS协议是Web服务的基础。HTTPS通过SSL/TLS提供加密通信和身份认证,增强了HTTP...
3. Avro(Apache):由Apache Hadoop项目开发,强调数据的版本控制和兼容性,适合大数据持久化和跨语言通信。 4. Thrift(Facebook):提供了高效的RPC(Remote Procedure Call)框架,适用于跨语言服务间的高性能...
Thrift适合于分布式系统中的RPC解决方案,但跨防火墙的安全性和调试难度较高。 6. **Avro**:Avro是Apache Hadoop项目的一部分,提供JSON和Binary两种序列化格式。Binary格式在性能和空间上接近Protobuf,且具有...
本文将对五种常见的快速序列化框架——Google Protobuf、Apache Thrift、Hessian、Avro 和 Kryo 进行详细介绍,并对其性能进行比较。 #### 二、各框架详解 ##### 1. Google Protobuf - **简介**:由Google开发并...
JSON有多种实现,如Jackson、FastJson和Gson,它们都提供了将Java对象转换为JSON字符串和反转换的功能,支持跨语言交互。 Thrift是由Facebook开发的一种高性能的序列化框架,它需要编译器生成代码,类似于Google的...
11. 技术兼容性测试:Dubbo对主流的技术栈都有很好的兼容性,如Thrift、JSON-RPC、XML-RPC、Protobuf、Avro、JMX等。 在开发过程中,Dubbo遵循了以下基本原则和设计模式: - 模块分包:遵循领域驱动设计原则,将...
它可以比较如protobuf、Apache Avro、JSON和MsgPack等工具的效率。测试通常会包括创建大量消息,然后测量序列化、传输和反序列化的时间,以及生成数据的大小。 开发工具也可以帮助优化这一过程,例如IDE插件可以...
因此,在性能要求较高的场景下,我们通常会采用其他更高效的序列化方式,如Google的Protocol Buffers (protobuf)、Facebook的Thrift、Apache Avro,或者是自定义的序列化策略。这些方案通常能提供更小的序列化后的...
为了增强系统的稳定性,可以引入强Schema体系,如Protobuf、Thrift或Avro,并配合schema-registry和公司级的schema管理系统,实现字段兼容性检查和文档化,减少上下游迭代时的沟通成本。 总结来说,车好多的5-3+...
在【ytools-starter】项目中,这四种序列化工具可能被用于不同的场景,比如Avro可能用于大数据处理,protobuf和Thrift可能用于构建分布式服务之间的通信,而Kryo可能用于快速的内存缓存或内部数据传递。开发者可以...
在序列化方面,Dubbo 提供了多种序列化协议,包括 hessian2、json、nativejava、fst、kryo、avro 和 protobuf。这些协议用于将对象转换成字节流以便在网络间传输,不同的协议在性能、兼容性和数据大小上有各自的特点...