EN
返回档案库

案例库 · 工程与运营 · 技术决策 · 2001–2008

Google的Protobuf让服务数据有了schema,并赢得了线格式之争

Google在2008年开源了Protocol Buffers:模式定义的消息可编译成任何语言,序列化紧凑,成为服务间通信的标准。

Google

解法

Google内部服务需要大规模交换结构化数据,而现有方案要么太慢,要么太笨重,要么太临时。于是公司开发了Protocol Buffers:一种用于描述数据结构的定义语言,外加一个编译器,可以为开发者选择的语言生成对应结构的类。

生成的类包含高度优化的序列化代码:每个字段都有简单的get和set方法,将整个消息转换为字节数组或I/O流,或者解析回来,只需一次方法调用。线格式极其紧凑,这在每个字节都穿过数据中心时至关重要。

2008年7月,Google将Protocol Buffers开源,明确为了让更多人能利用并在此基础上构建。项目文档将其描述为一种语言无关、平台无关、可扩展的序列化结构化数据的机制,生成的代码支持十多种语言。

生效的原因

  • 编译器能为任何语言生成正确、优化的解析/序列化代码。
  • 紧凑的二进制输出相比文本格式节省了带宽和存储。
  • 单一的schema保证了服务间的线契约清晰。
  • 开源消除了采用时的供应商锁定顾虑。
取得的成效先定义schema;为每种语言生成代码聪明

可借鉴之处

在schema中一次性定义契约,然后在各处生成代码;格式之所以胜出,是因为紧凑性和跨语言支持已融入工具链。

后续进展

Protocol Buffers成为Google服务通信的标准,其schema先行的模式通过基于它构建的开源工具传播开来——文档至今仍将其宣传为语言无关、平台无关的序列化结构化数据的机制,支持从C++到Rust的API。

资料来源

发现哪里写错了?告诉我们。

相关案例