protocol-buffers - Apache Thrift 和 Google Protocol Buffer 有什么用途?

标签 protocol-buffers thrift

我看到很多提到 Thrift 和 Protocol Buffers,但我并不真正了解它们的用途。从我有限的理解来看,它们基本上是在您想要进行跨语言序列化时使用的,即,当您想要将某种语言的一些数据结构发送到用另一种语言编写的另一个程序时。

它是否正确?它们用于其他用途吗?

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

最佳答案

它们主要是序列化协议(protocol)。任何时候您需要在机器或进程之间传输数据,或将其存储在磁盘等上,都需要对其进行序列化。

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

现在人们可以花很长时间手动编写冗长乏味、漏洞百出、次优、不可移植的不那么冗长的格式,或者他们可以使用经过充分测试的通用序列化格式,这些格式有据可查、跨平台、便宜——由花费 的人来处理和设计远为了友好而担心序列化太久 - 例如,版本容忍。理想情况下,它还允许平台中立的描述层(想想“wsdl”或“mex”),让您可以轻松地向任何其他开发人员说“这就是数据的样子”(不知道他们使用什么工具/语言/平台)正在使用),并让他们轻松地使用数据,而无需从头开始编写新的序列化器/反序列化器。

这就是 protobuf 和 thrift 的用武之地。

在大多数情况下,就数量而言,我实际上希望两端在同一家公司使用相同的技术:简单地说,他们需要以最少的麻烦和开销从 A 获取数据到 B,或者他们需要存储它并稍后再加载它(例如,我们在 redis blob 中使用 protobuf 作为二级缓存)。

关于protocol-buffers - Apache Thrift 和 Google Protocol Buffer 有什么用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746830/

相关文章:

c# - Protobuf-net:无法创建抽象类

dart - 在哪里设置 protoc 的路径以导入标准 Protocol Buffers

c# - Netty protobuf 和 google csharp proto 使用

java - Apache Thrift 中的通用对象

python - 如何将 thrift 结构传递给 Python 服务器

java - Hiveserver2 Java API

python - 如何在 Python 中使用 protobuf 映射?

cmake - 通过 FetchContent 安装 protobuf 时如何使用 cmake 命令 protobuf_generate?

java - 如何在Apache thrift中以JSON列表输出

java - Apache Thrift 可以在 Google App Engine 上使用吗?