你会推荐使用Google Protocol Buffers或Caucho Hessian作为跨语言的线上二进制格式吗?

时间:2009-01-20 13:44:35

标签: protocol-buffers thrift hessian caucho

您会推荐使用Google Protocol Buffers或Caucho Hessian作为跨语言的线上二进制格式吗?或者其他任何事情,例如Facebook Thrift?

8 个答案:

答案 0 :(得分:9)

我们使用Caucho Hessian是因为降低了集成成本和简单性。它的性能非常好,所以它适用于大多数情况。

对于一些跨语言集成并不重要的应用程序,有一个更快的库可以挤出更多称为Kryo的性能。 不幸的是,它并没有被广泛使用,它的协议不像Hessian那样是准标准的。

答案 1 :(得分:5)

取决于用例。 PB更紧密耦合,最好在内部与紧密耦合系统一起使用;不适合共享/公共接口(如在两个以上的特定系统之间共享)。 Hessian更具自我描述性,在Java上表现出色。在我的测试中比PB好,但我确信这取决于用例。 PB似乎在文本数据方面存在问题,也许它已针对整数数据进行了优化。

我认为两者对公共接口都不是特别好,但考虑到你想要二进制格式,这可能不是一个大问题。

编辑:根据jvm-serializers基准,黑森州的表现实际上并不是那么好。只要你确保添加强制在Java上使用快速选项的标志,PB就会非常快。  如果PB对公共接口不好,那是什么? IMO,像JSON这样的开放格式在外部是优越的,并且通常比不够快,性能无关紧要。

答案 2 :(得分:3)

对我来说,Caucho Hessian是最好的。

入门非常容易,性能也很好。我测试了本地,潜伏的是大约3ms,在Lan你可以期待大约10ms。

使用粗麻布,您不必编写另一个文件来定义模型(我们使用java + java)。它为开发和维护节省了大量时间。

答案 3 :(得分:2)

如果您需要支持来连接来自多种语言/平台的应用程序,那么Hessian是最好的。如果你只使用Java,那么Kryo会更快。

答案 4 :(得分:1)

我自己正在研究这个......到目前为止还没有很好的结论,但我发现http://dewpoint.snagdata.com/2008/10/21/google-protocol-buffers/总结了所有选项。

答案 5 :(得分:0)

Muscle有二进制邮件传输。很抱歉,我没有对其他人发表评论,因为我没有尝试过。

答案 6 :(得分:0)

我尝试了Google Protocol Buffers。它适用于C ++ / MFC,C#,PHP和更多语言(参见:http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns),无论传输和磁盘保存/加载如何都能正常工作。

答案 7 :(得分:0)

我会说,就其二进制格式而言,ProtocolBuffers,Thrift或Hessian非常相似 - 它们提供跨语言序列化支持。固有的序列化可能在它们之间存在一些小的性能差异(大小/空间权衡),但这不是最重要的事情。 ProtocolBuffers肯定是一个表现良好的IDL定义格式,具有可扩展性的特点,使其具有吸引力。

然而,在问题中使用“线上”意味着使用通信库。在这里,Google为protobuf RPC提供了一个接口定义,这相当于制定了一个规范,其中所有实现细节留给了实现者。这是不幸的,因为它意味着事实上没有跨语言实现 - 除非你能找到这里可能提到的跨语言实现http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns。我见过一些支持java和c,c和c ++,或python和c等的RPC实现,但在这里你只需要找到一个满足你具体要求的库,否则你可能会感到失望。 (至少我很失望地写了protobuf-rpc-pro)

Kyro是一种类似protobuf的序列化格式,但仅限java。 Kyro / Net是使用Kryo消息的仅Java的RPC实现。因此,它不是“跨语言交流”的好选择。

今天似乎ICE http://www.zeroc.com/和提供开箱即用的RPC实现的Thrift是最好的跨语言RPC实现。