Thrift与Protocol Buffers的比较

43

我已经使用PB相当长一段时间了,但是Thrift一直在我脑海中。

我认为Thrift的主要优点如下:

  1. 本地集合(例如vector、set等)与PB的重复提供类似但不完全相同的功能相比具有更好的功能(没有迭代器,除非您深入研究RepeatedField,而文档指出“在大多数情况下不需要它”)。
  2. 提供了一种体面的RPC实现,而不仅仅是钩子来插入自己的实现。
  3. 支持的语言更多(PB只为Java、C++和Python提供“官方”支持)

Thrift的缺点如下:

  1. RPC实现意味着我无法在其上插入自己的(例如)加密/身份验证层。
  2. Windows支持似乎不太好。
  3. PB明显具有(如果不是更好的话)更易于访问的文档。

中立:

  • Windows上.lib/.dll的大小未知(Thrift)。
  • .lib在Windows上很大(PB,但它提供了一个更小的-lite版本)。
  • 在速度上,它们都似乎是相似的。

我还没有准备好切换到Thrift,有人能给我更多的优缺点或者选择其中一种的原因吗?

谢谢!


将更新内容放在单独的部分而不是覆盖原始问题被认为是良好的风格。 :) - awdz9nld
你实际上可以添加自己的加密/身份验证层。你只需要编写一个替代的TTransport类。或者类似于那样的东西...在那里有一个TSSLSocket类。 - Timmmm
老问题了,我知道。只是想提一下,自2010年以来,Thrift在Windows上的支持已经得到了大大的改善。 - JensG
4个回答

18

如我所说的"Thrift与Protocol Buffers最大的区别是什么?"话题:

参考Thrift vs Protobuf vs JSON比较

此外,这些解决方案还提供了许多有趣的附加工具,这些工具可能会起到决定性作用。以下是 Protobuf 的示例:Protobuf-wiresharkprotobufeditor

这份信息已经过时。这里是最新版本 - JensG

9

你可能首先需要分析自己的需求:

你是否需要一种协议无关的格式?例如,你想实现自定义协议或需要100%的可移植性吗?在这种情况下,请使用PB。

如果你对Thrift的默认协议满意,并且 需要 一个协议来开始,请毫不犹豫地选择Thrift。

希望这有所帮助。


8

我们选择使用Thrift而不是protocol buffers的主要原因是,protocol buffers不能自动生成完整的RPC服务器,并且现有的PB解决方案似乎都相当不稳定。这只是我的看法。


0
你需要详细说明你的使用情况。否则这就是一个“汽车和卡车哪个更好?”的问题。

11
两者的使用场景非常相似,Thrift和Protocol Buffers在基本层面上都是实现跨平台数据序列化的通用方法。在更高的层面上,它们都可以用于实现跨平台客户端/服务器应用程序。它们都足够通用,可以作为一个序列化格式,或者作为更大系统中的构建块。但是,从根本上讲,它们提供的是相同的东西。问题是,这两种方法哪种更好呢?在更高的层面上,Thrift提供的附加服务是否值得使用? - please delete me
1
让我换个说法,你能否将你列出的优点和缺点按照对你的应用最相关到最不相关的顺序进行评分?或者在1到10的等级中,你认为每个因素对你的问题领域有多大影响?我曾经认真考虑过在工作项目中使用Protocol Buffers,但后来我决定放弃了,因为它缺乏内在的消息框架(你不能仅仅将PBs连续地写入磁盘,你需要一个信封来包装它们)。对于某些情况(UDP消息传递、某些形式的IPC、RPC),这并不重要;但对我来说,这是一个致命缺陷。 - John Zwinck
1
哦,让我提出另一个想法,看看它是否与您共鸣:我认为Thrift的支持者比Protocol Buffers的支持者在改进其产品方面具有较弱的长期激励。 - John Zwinck
1
@JohnZwinck - 你能解释一下为什么Facebook没有像Google那样改进Protocol Buffers的动力那么强吗? - pepsi
哇,这是古老的注释!我已经不记得当时在想什么了,而且注释也不应该成为讨论论坛。不管怎样,我说的是“看看它是否与你共鸣”,所以如果没有共鸣,就忽略我在那里说的话吧。 :) - John Zwinck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接