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

时间:2011-10-12 21:28:40

标签: protocol-buffers thrift

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

这是对的吗?他们是否用于其他任何事情?

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

1 个答案:

答案 0 :(得分:18)

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

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

现在人们可以花费多年时间手工编写繁琐,错误,次优,非便携式格式,这些格式不那么详细,或者他们可以使用经过充分测试的通用序列化格式记录良好,跨平台,廉价到流程,并由那些花费长期担心序列化以便友好的人设计 - 例如,版本容忍。理想情况下,它还允许平台中立的描述层(想想“wsdl”或“mex”),它允许您轻松地向任何其他开发人员说“这里是数据的样子”(不知道他们使用什么工具/语言/平台)正在使用),让他们无痛地消耗数据而无需从头开始编写新的序列化器/解串器。

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

在大多数情况下 volume-wise ,我实际上期望两端在同一家公司中使用相同的技术:简单地说,他们需要从A到B获取数据,而且最小化和开销,或者他们需要存储它并稍后加载它(例如,我们在redis blobs中使用protobuf作为二级缓存)。