ProtoBuf(Protocol Buffers)历史
RPC
- [1] gRPC简介2024年5月5日
- [2] gRPC 核心概念和生命周期2024年5月5日
- [3] ProtoBuf(Protocol Buffers)简介2024年5月5日
- [4] ProtoBuf(Protocol Buffers)历史2024年5月5日
理解为什么 protobuf 被创建以及发展过程中的决定,可以帮助你更好地使用这个工具。
为什么发布 Protocol Buffers?
有几个原因促使 Google 发布 Protocol Buffers。
-
Protocol buffers 被 Google 内部的许多项目使用。他们有其他想要作为开源发布的项目使用 protocol buffers,因此为了开源这些项目需要先开源 protocol buffers。 实际上,这项技术的部分早已经进入了开源领域;如果你深入研究 Google AppEngine 的代码,你可能会发现其中的一些内容。
-
Google 希望提供公共API,可以接受 protocol buffers 和 XML。一是因为前者更有效率,二是因为其内部也是将收到的XML转换为 protocol buffers。
-
Google 认为外部的人可能也会认同 protocol buffers 的价值。
为什么第一个发布版本是第2版?第1版怎么了?
协议缓冲区的初始版本(“Proto1”)是从2001年初开始开发的,每当有人需要新功能就会为其开发,在多年的时间里不断发展演变。像任何以这种方式创建的东西一样,它有点混乱。直接按照原样发布出去是不可行的。
版本2(“Proto2”)是一个完全的重写,它保留了大部分原有设计,并使用了 Proto1 中的许多实现思路。一些特性被添加,一些被删除。最重要的是,代码被整理清洗了一遍,没有依赖任何尚未开源的 Google 库。
为什么叫“Protocol Buffers”?
这个名称起源于格式的早期阶段,在我们还没有 protocol buffer 编译器为我们生成类的时候。当时有一个称为 ProtocolBuffer
的类,实际上是一个缓冲区。
用户通过调用诸如 AddValue(tag, value)
之类的方法逐个向此缓冲区添加标签/值对。原始字节存储在一个缓冲区中,一旦消息构建完成,就可以将其写出。
在那之后,虽然“缓冲区”这个名字已经失去了意义,但它仍然被习惯性保留了下来。今天,人们通常使用术语“protocol message(协议消息)”来指代抽象意义上的消息,“protocol buffer(协议缓冲)”来指代消息的序列化副本,“protocol message object(协议消息对象)”来指代表示解析消息的内存中的对象。
Google是否在 Protocol Buffers 上拥有任何专利?
Google 目前没有对 protocol buffers 的专利,我们很乐意解决人们可能对相关专利产生的任何疑虑。
Protocol Buffers 与 ASN.1、COM、CORBA 和 Thrift 有何不同?
我们认为所有这些系统都有优点和缺点。Google 在内部依赖 Protocol Buffers。它是很多项目成功的重要成因之一,但这并不意味着它是所有问题的理想解决方案。你应该为你自己的项目酌情评估每个替代方案。
值得注意的是,这些技术中有几种定义了交换格式和 RPC(远程过程调用)协议。Protocol buffers 只是一个交换格式。它们可以很容易地用于 RPC,虽然它确实对定义 RPC 服务支持有限,但它不与任何一个 RPC 实现或协议绑定。