Apache Thrift和谷歌的协议缓冲区最大的优点和缺点是什么?
当前回答
首先,protobuf并不是一个完整的RPC实现。它需要像gRPC这样的东西来配合。
与Thrift相比,gPRC非常慢:
http://szelei.me/rpc-benchmark-part1/
其他回答
RPC是另一个关键区别。Thrift生成代码来实现RPC客户机和服务器,其中协议缓冲区似乎主要被设计为单独的数据交换格式。
根据维基百科的说法,Thrift运行时不能在Windows上运行。
一个尚未提到的明显的事情是,它们既可以是赞成的,也可以是反对的(两者都是一样的),它们是二进制协议。这允许更紧凑的表示和可能更好的性能(优点),但降低了可读性(或更确切地说,可调试性),这是一个缺点。
此外,两者对工具的支持都比xml(甚至json)等标准格式少一些。
(编辑)这里有一个有趣的比较,解决了大小和性能的差异,并包括一些其他格式(xml, json)的数字。
首先,protobuf并不是一个完整的RPC实现。它需要像gRPC这样的东西来配合。
与Thrift相比,gPRC非常慢:
http://szelei.me/rpc-benchmark-part1/
正如我在“节俭vs协议缓冲区”主题中所说:
参考Thrift vs Protobuf vs JSON的比较:
Thrift supports out of the box AS3, C++, C#, D, Delphi, Go, Graphviz, Haxe, Haskell, Java, Javascript, Node.js, OCaml, Smalltalk, Typescript, Perl, PHP, Python, Ruby, ... C++, Python, Java - in-box support in Protobuf Protobuf support for other languages (including Lua, Matlab, Ruby, Perl, R, Php, OCaml, Mercury, Erlang, Go, D, Lisp) is available as Third Party Addons (btw. Here is SWI-Prolog support). Protobuf has much better documentation and plenty of examples. Thrift comes with a good tutorial Protobuf objects are smaller Protobuf is faster when using "optimize_for = SPEED" configuration Thrift has integrated RPC implementation, while for Protobuf RPC solutions are separated, but available (like Zeroc ICE ). Protobuf is released under BSD-style license Thrift is released under Apache 2 license
此外,对于这些解决方案,还有许多有趣的附加工具可用,这可能会决定。以下是Protobuf的示例:Protobuf-wireshark, protobufeditor。
推荐文章
- 如何JSON序列化集?
- 如何将TimeSpan序列化为XML
- 如何在Intellij生成串行版本UID
- 在Go中使用JSON Marshal的小写JSON键名
- 什么是序列化?
- 我如何复制一个哈希在Ruby?
- 为什么生成较长的serialVersionUID而不是简单的1L?
- 将流转换为字符串并返回
- Parcelable遇到IOException写入序列化对象getactivity()
- 谷歌协议缓冲区vs json vs XML
- 不带空格的Python - json
- 打印对象的所有属性
- 在Swift中将字典转换为JSON
- 将类实例序列化为JSON
- 任务不可序列化:java.io.NotSerializableException,当只对类而不是对象调用闭包外部的函数时