什么是Apache Thrift和Google Protocol Buffers用于?

gra*_*tur 13 thrift protocol-buffers

我看到Thrift和Protocol Buffers提到了很多,但我真的不明白它们用于什么.根据我有限的理解,当你想要进行跨语言序列化时,它们基本上被使用,即当你有一种语言的某些数据结构要发送到另一种语言编写的另一个程序时.

它是否正确?它们用于其他任何东西吗?

(从我再次有限的理解,我认为Thrift和Protocol Buffers基本上是同一件事的两个不同版本 - 随意纠正我或详细说明.)

Mar*_*ell 18

它们主要是序列化协议.只要您需要在机器或进程之间传输数据,或将其存储在磁盘等上,就需要对其进行序列化.

Xml/json/etc工作正常,但它们有一定的开销使它们不受欢迎 - 除了有限的功能外,它们相对较大,并且在任何一个方向上处理的计算成本都很高.可以通过压缩来改善大小,但这会增加处理成本.它们确实具有人类可读的优点,但是:大多数数据不是人类阅读的.

现在,人们可以花费多年时间手动编写冗长,错误,次优,不可移植的格式,这些格式不那么冗长,或者他们可以使用经过充分测试的通用序列化格式,这些格式具有良好的文档记录,跨平台,便宜 -到工艺,而被人们谁花设计远远太长,以友好担心序列化-例如,版本宽容.理想情况下,它还允许平台中立的描述层(想想"wsdl"或"mex"),它允许您轻松地向任何其他开发人员说"这里是数据的样子"(不知道他们使用什么工具/语言/平台)正在使用),让他们无痛地消耗数据,而无需从头开始编写新的序列化器/解串器.

这就是protobuf和节俭进来的地方.

在大多数情况下,在体积方面,我实际上期望两端在同一家公司中使用相同的技术:简单地说,他们需要从A到B获取数据,只需最少的麻烦和开销,或者他们需要存储它和稍后加载它(例如,我们在redis blobs中使用protobuf作为二级缓存).

  • 所以它们基本上就像Json或XML,但是采用二进制格式? (4认同)
  • @GautamK本质上,是的. (4认同)
  • 谢谢,这个答案真的消除了我的很多疑虑. (2认同)