Apache Thrift和谷歌的协议缓冲区最大的优点和缺点是什么?


当前回答

RPC是另一个关键区别。Thrift生成代码来实现RPC客户机和服务器,其中协议缓冲区似乎主要被设计为单独的数据交换格式。

其他回答

它们都提供了许多相同的功能;然而,有一些不同之处:

节俭支持“例外” 协议缓冲区有更好的文档/示例 Thrift有一个内置的Set类型 协议缓冲区允许“扩展”——你可以扩展一个外部原型来添加额外的字段,同时仍然允许外部代码对这些值进行操作。在节俭中没有办法做到这一点 我发现协议缓冲区更容易阅读

基本上,它们是相当等效的(从我读到的内容来看,协议缓冲区的效率略高)。

与python上的protobuff相比,我能够使用基于文本的协议获得更好的性能。然而,没有类型检查或其他花哨的utf8转换等…这是protobuff提供的。

因此,如果序列化/反序列化是您所需要的,那么您可能可以使用其他方法。

http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html

根据维基百科的说法,Thrift运行时不能在Windows上运行。

一个尚未提到的明显的事情是,它们既可以是赞成的,也可以是反对的(两者都是一样的),它们是二进制协议。这允许更紧凑的表示和可能更好的性能(优点),但降低了可读性(或更确切地说,可调试性),这是一个缺点。

此外,两者对工具的支持都比xml(甚至json)等标准格式少一些。

(编辑)这里有一个有趣的比较,解决了大小和性能的差异,并包括一些其他格式(xml, json)的数字。

首先,protobuf并不是一个完整的RPC实现。它需要像gRPC这样的东西来配合。

与Thrift相比,gPRC非常慢:

http://szelei.me/rpc-benchmark-part1/