Thrift 或 Protocol buffer 作为跨语言序列化解决方案?

Posted

技术标签:

【中文标题】Thrift 或 Protocol buffer 作为跨语言序列化解决方案?【英文标题】:Thrift or Protocol buffer as cross-language serialization solution? 【发布时间】:2013-05-30 06:24:45 【问题描述】:

我已经选择在项目中使用 thrift 作为 RPC 框架。这个项目有很多序列化/反序列化操作(例如,将数据存储到磁盘)。至少 C++/Java/Python 应该可以访问序列化格式。 thrift 的序列化解决方案似乎比 Protobuf 更复杂(例如,它需要在序列化对象之前创建协议)。

所以我的问题是:是否值得将 Protobuf 用于序列化/反序列化部分,即使 thrift 能够 完成这项任务?

【问题讨论】:

我无法回答这个问题,但我认为 Protobuf 有更多可用的工具 (code.google.com/p/protobuf/wiki/ThirdPartyAddOns),如果您正在海化到磁盘,这可能会很有用 【参考方案1】:

我同意 Thrift 是跨语言 RPC 比 Protobuf RPC 更好的选择(请参阅http://pjklauser.wordpress.com/2013/02/27/why-googles-protobuf-rpc-will-not-reach-widespread-adoption/)。如果您已经在使用 thrift,那么很难证明使用不同的“库”来序列化文件/存储是合理的。您需要编写无穷无尽的映射代码。这两个库将具有不同的维护周期,您需要独立维护这些周期,这将在未来付出额外的努力。与您的额外工作相比,多写一行或两行代码、节省一两个字节空间或节省一微秒 CPU 时间的成本将微不足道。

【讨论】:

我主要关心的是开发的开销。两种解决方案的效率对我来说都还可以。

以上是关于Thrift 或 Protocol buffer 作为跨语言序列化解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Thrift、Google Protocol Buffers、MessagePack、ASN.1 和 Apache Avro 之间的主要区别是啥?

PIG 脚本错误:java.lang.NoSuchMethodError:org.apache.thrift.protocol.TProtocol.getScheme

Google Protocol Buffer入门

Google Protocol Buffers 入门

Google Protocol Buffer 的使用和原理

协议缓冲区(Protocol Buffers)