Thrift,Protocol Buffers,JSON,EJB等性能比较?

我们正在研究运输/协议解决scheme,并正在进行各种性能testing,所以我认为如果他们已经这样做,我会与社区进行核实:

有没有人对简单的echo服务进行服务器性能testing,以及比较Linux上的EJB3,Thrift和Protocol Buffers的各种消息大小的序列化/反序列化?

主要的语言是Java,C / C ++,Python和PHP。

更新:我仍然对此非常感兴趣,如果有人做了任何进一步的基准,请让我知道。 此外,非常有趣的基准显示压缩的JSON执行类似/优于Thrift /协议缓冲区 ,所以我也扔JSON到这个问题。

在thrift-protobuf-compare项目wiki上可以find最新的比较。 它包括许多其他序列化库。

我正在编写一个名为thrift-protobuf-compare的开源项目中的一些代码,比较protobuf和thrift。 目前它涵盖了几个序列化方面,但我打算覆盖更多。 结果(对于Thrift和Protobuf )在我的博客中进行了讨论,我将在添加更多内容时join。 您可以查看代码来比较API,描述语言和生成的代码。 我会很高兴有贡献,以实现更圆整的比较。

您可能对这个问题感兴趣: “节俭与协议缓冲区最大的区别?

我testing了其他数据格式(xml,json,默认对象序列化,hessian,一个专有的)和数据库(jaxb,快速信息集,手写)的数量的性能PB的数据绑定任务(读和写),但节俭的格式不包括在内。 具有多个转换器(如xml)的格式的性能差异非常大,从非常慢到非常快。 作者声称与感知performance之间的相关性相当薄弱。 特别是对于最疯狂的声明。

对于它的价值,我发现PB的performance会被夸大(通常不是由作者,而是其他人只知道是谁写的)。 使用默认设置,它没有击败最快的文本XML替代。 有了优化的模式(为什么这不是默认的?),它有点快,与最快的JSON包相媲美。 黑森州是相当快,文本JSON也。 正确的二进制格式(这里没有名字,这是公司内部)是最慢的。 Java对象序列化对于较大的消息来说是快速的,对于小对象来说则较less(即对每个操作的高度固定的noverhead)。 PB的消息大小是紧凑的,但是你必须做所有的权衡(数据不是自我描述的:如果你失去了模式,你会丢失数据;当然有索引和值types,但是从你有什么如果你愿意的话,可以反编译回字段名称),但是我个人只会select它用于特定的用例 – 大小敏感,紧密耦合的系统,其中界面/格式永远不会(或非常非常罕见)改变。

我的观点是(a)实现通常比规范(数据格式)更重要,(b)端到端,最佳(不同格式)之间的差异通常不足以支配select。 也就是说,select最喜欢使用的格式+ API / lib /框架(或者有最好的工具支持),find最好的实现方法,看看它是否工作得足够快,可能会更好。 如果(并且只有!)不,考虑下一个最佳的select。

PS。 不知道这里的EJB3是什么。 也许只是简单的Java序列化?

在PB的“待办事项”列表的最上方,有一件事是移植Google的内部协议缓冲区性能基准 – 主要是将保密的消息格式转换成完全平淡的格式,然后执行相同的操作数据。

完成之后,我想可以在Thrift中build立相同的消息,然后比较性能。

换句话说,我现在还没有这方面的数据 – 但希望在接下来的几周内…

如果原始networking性能是目标,那么没有什么比IIOP更好(参见RMI / IIOP)。 尽可能小的空间 – 只有二进制数据,根本没有标记。 序列化/反序列化也非常快。

由于它是IIOP(即CORBA),几乎所有的语言都有绑定。

但我认为表演不是唯一的要求,对吧?

为了支持弗拉基米尔关于IIOP的观点,这里有一个有趣的性能testing,它应该提供一些关于谷歌基准testing的额外信息,因为它比较了Thrift和CORBA。 (Performance_TIDorb_vs_Thrift_morfeo.pdf //链接不再有效)引用这项研究:

  • 节俭对小数据非常有效(基本types作为操作参数)
  • Thrifts传输效率不如CORBA中等和大量数据(结构和>复杂types> 1千字节)。

另一个与性能无关的奇怪的限制是,Thrift仅限于返回几个值作为结构 – 尽pipe如此,性能等方面也可能得到改善。

有趣的是,Thrift IDL与CORBA IDL非常匹配,很好。 我没有使用过Thrift,看起来很有趣,特别是对于较小的消息,而其中一个devise目标是安装较less麻烦,所以这些是Thrift的其他优点。 也就是说,CORBA有一个不好的说唱,有很多优秀的实现,比如omn​​iORB ,它具有绑定Python的function,易于安装和使用。

编辑:节俭和CORBA链接不再有效,但我find了另一个有用的文件从欧洲核子研究组织。 他们评估了他们的CORBA系统的替代品,当他们评估Thrift时 ,他们最终select了ZeroMQ。 虽然Thrift在性能testing中performance最快,在9000 msg / sec与8000(ZeroMQ)和7000+ RDA(基于CORBA)之间,他们select不进一步testingThrift,因为其他问题比较明显:

它仍然是一个不成熟的产品,有一个错误的实施

我已经为我的工作做了一个春季启动,mappers(手动,Dozer和MapStruct),Thrift,REST,SOAP和Protocol Buffers集成的研究。

服务器端: https : //github.com/vlachenal/webservices-bench

客户端: https : //github.com/vlachenal/webservices-bench-client

它没有完成,并已在我的个人电脑上运行(我必须要求服务器来完成testing)…但结果可以咨询:

  • 笔记本电脑: https : //github.com/vlachenal/webservices-bench/blob/master/results.md
  • 桌面: https : //github.com/vlachenal/webservices-bench/blob/master/results-desktop.md

项目可以通过拉取请求完成(对于修复或其他结果)。