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


当前回答

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

其他回答

协议缓冲区似乎有一个更紧凑的表示,但这只是我从阅读节俭白皮书中得到的印象。用他们自己的话来说:

我们决定反对一些极端的存储优化(即包装 小整数转换成ASCII或使用7位延续格式) 为了代码的简单性和清晰度。这些改变 当我们遇到一个性能关键的问题时,可以很容易地做出什么 需要它们的用例。

此外,这可能只是我的印象,但协议缓冲区似乎有一些更厚的抽象结构版本控制。Thrift确实提供了一些版本控制支持,但是要做到这一点需要付出一些努力。

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

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

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

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

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

与Thrift相比,gPRC非常慢:

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

Protobuf序列化对象大约比Thrift小30%。 你可能想用protobuf对象做的大多数操作(创建、序列化、反序列化)都比thrift慢得多,除非你打开optimize_for = SPEED选项。 Thrift具有更丰富的数据结构(Map, Set) Protobuf API看起来更干净,尽管生成的类都打包为内部类,这不是很好。 节俭枚举不是真正的Java枚举,也就是说,它们只是整数。Protobuf有真正的Java枚举。

要进一步了解差异,请查看这个开放源代码项目的源代码差异。