首页 文章

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

提问于
浏览
13

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

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

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

1 回答

  • 18

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

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

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

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

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

相关问题