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

13

我经常看到提到Thrift和Protocol Buffers,但我不太了解它们的用途。从我的有限理解来看,它们基本上是用于跨语言序列化,即当您在一种语言中有一些数据结构,希望将其发送到另一种语言编写的程序时使用。

这样理解是否正确?它们还用于其他目的吗?

(根据我的有限理解,我认为Thrift和Protocol Buffers基本上是同一个事物的两个不同版本 -- 欢迎您纠正或详细说明。)


2
它们是一种“类型化”的消息格式,用于高效地二进制编码一组原始数据类型(无需显式定制编码器,因为它们采用消息生成器)。它们既可以作为交换机制,也可以作为存储(序列化)机制。由于该格式已经定义明确,因此可以在语言之间共享(如果有实现),可以被使用相同语言的远程进程共享,或者在单个进程中用于序列化(或其他用途)。是的,它们实际上在争夺同样的市场(以及Avro和其他产品)。 - user166390
我认为这些应该链接起来:Thrift与Protocol Buffers的最大区别是什么? - blong
1个回答

18
它们主要是序列化协议。每次您需要在机器或进程之间传输数据,或将其存储在磁盘上等场景下,都需要进行序列化。
Xml / json / 等可以工作,但它们具有某些开销,使它们不受欢迎-除了功能有限外,它们相对较大,并且计算处理成本很高。尺寸可以通过压缩来改善,但这会增加更多的处理成本。它们确实具有易读性的优点,但大多数数据并不被人类阅读。
现在,人们可以手动编写冗长、错误、非最佳和不可移植的格式,或者使用经过充分测试、跨平台、便宜处理的通用序列化格式,并由花费太多时间担心序列化以变得友好的人设计,例如版本兼容。理想情况下,它还将允许平台中立的描述层(类似于“wsdl”或“mex”),使您可以轻松地告诉任何其他开发人员“数据长什么样子”,而无需知道他们正在使用哪些工具/语言/平台,并使他们轻松地消费数据,而无需从头编写新的序列化程序/反序列化程序。
这就是protobuf和thrift的作用所在。
在大多数情况下,就体积而言,我实际上预计两端都在同一家公司的相同技术中:简单地说,他们需要以最小的麻烦和开销将数据从A传输到B,或者需要稍后存储和加载它(例如,我们在redis blob中使用protobuf作为二级缓存)。

4
所以它们基本上像是 Json 或 XML,但是使用二进制格式? - Gautam
2
谢谢,这个答案真的解决了我很多疑惑。 - Gautam

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