Apache Thrift与Google的Protocol Buffer最大的优缺点是什么?
Apache Thrift与Google的Protocol Buffer最大的优缺点是什么?
Answers:
它们都提供许多相同的功能。但是,有一些区别:
Set
类型基本上,它们是相当等效的(与我所读的协议缓冲区相比,其效率稍高一些)。
map
也支持
另一个重要区别是默认支持的语言。
两者都可以扩展到其他平台,但是这些是现成可用的语言绑定。
RPC是另一个主要区别。Thrift生成用于实现RPC客户端和服务器的代码,在这些客户端和服务器中,协议缓冲区似乎主要是单独设计为数据交换格式的。
option optimize_for = SPEED
。要进一步了解它们之间的差异,请查看此开源项目中的源代码差异。
正如我所说的“节制与协议缓冲区”主题:
此外,对于这些解决方案,还有很多有趣的其他工具可以决定。以下是Protobuf的示例:Protobuf-wireshark,protobufeditor。
协议缓冲区似乎具有更紧凑的表示形式,但这只是阅读Thrift白皮书给我的印象。用他们自己的话说:
为了简化代码,我们决定不进行某些极端的存储优化(即,将小整数打包为ASCII或使用7位连续格式)。如果遇到性能要求严格的用例,可以轻松进行这些更改。
同样,这可能只是我的印象,但是协议缓冲区似乎在结构版本控制方面有更粗略的抽象。Thrift确实有一些版本控制支持,但是要实现它需要一些努力。
与基于python的probbuff相比,基于文本的协议我可以获得更好的性能。但是,没有protobuff提供的类型检查或其他精美的utf8转换等。
因此,如果只需要序列化/反序列化,则可以使用其他方法。
http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html
尚未提及的一件显而易见的事情是,它们既可以是优点,也可以是缺点(并且两者都相同)是它们是二进制协议。这允许更紧凑的表示形式,并可能具有更高的性能(优点),但可读性(或更确切地说,可调试性)却降低了。
而且,两者都比xml(甚至json)等标准格式的工具支持少。
(编辑)这是一个有趣的比较,它解决了大小和性能上的差异,并且还包括其他一些格式(xml,json)的数字。
并且根据Wiki,Thrift运行时不能在Windows上运行。
ProtocolBuffers更快。
这里有一个不错的基准:http : //code.google.com/p/thrift-protobuf-compare/wiki/基准测试
您可能还需要研究Avro,因为Avro甚至更快。
Microsoft在这里有一个软件包:http :
//www.nuget.org/packages/Microsoft.Hadoop.Avro
顺便说一句,我见过最快的是Cap'nProto;
可以在Marc Gravell的Github存储库中找到AC#实现。
我认为大多数观点都没有想到Thrift是RPC框架这一基本事实,它恰好具有使用多种方法(二进制,XML等)对数据进行序列化的能力。
协议缓冲区是专为序列化而设计的,它不是Thrift之类的框架。
这里有一些要点,我还要补充一点,以防有人穿过这里。
Thrift为您提供了在Thrift-binary和Thrift-compact(反)串行化器之间进行选择的选项,thrift-binary将具有出色的性能,但包大小更大,而Thrift-compact将为您提供良好的压缩效果,但需要更大的处理能力。这很方便,因为您始终可以像更改代码行一样容易地在这两种模式之间切换(麻烦,甚至使其可配置)。因此,如果您不确定应针对包大小或处理能力对应用程序进行多少优化,节俭可能是一个有趣的选择。
PS:参见这个出色的基准项目,通过thekvs
该项目可以比较许多序列化程序,包括节俭二进制,节俭紧凑和protobuf:https://github.com/thekvs/cpp-serializers
PS:还有一个名为的序列化器YAS
,它也提供此选项,但是它是无模式的,请参见上面的链接。