Protobuf

Protobuf

历史发展

2001年初,Protobuf首先在Google内部创建,我们把它称之为proto1,一直以来在Google的内部使用,其中也不断的演化,根据使用者的需求也添加很多新的功能,一些内部库依赖它。几乎每个Google的开发者都会使用到它。Google开始开源它的内部项目时,因为依赖的关系,所以他们决定首先把Protobuf开源出去。proto1在演化的过程中有些混乱,所以Protobuf的开发者重写了Protobuf的实现,保留了proto1的大部分设计,以及proto1的很多的想法。但是开源的proto2不依赖任何的Google的库,代码也相当的清晰。200877日,Protobuf开始公布出来。

Protobuf公布出来也得到了大家的广泛的关注,逐步地也得到了大家的认可,很多项目也采用Protobuf进行消息的通讯,还有基于Protobuf的微服务框架GRPC。在使用的过程中,大家也提出了很多的意见和建议,Protobuf也在演化,于2016年推出了Proto3Proto3简化了proto2的开发,提高了开发的效能,但是也带来了版本不兼容的问题。

目前Protobuf的稳定版本是3.9.2,于2019923日发布。由于很多公司很早的就采用了Protobuf,所以很多项目还在使用proto2协议,目前是proto2proto3同时在使用的状态。Protocol Buffer名称来自于初期一个主要的类的名称ProtocolBufferGoogle当前并没有Protobuf的相关专利,所以不必担心侵权的问题。

压缩对比

Protocol Buffers只有一种二进制编码格式,它的打包方式与Thrift稍有不同,但与ThriftCompactProtocol非常相似Protobuf将同样的记录塞进了33个字节中。对于如下的定义:

message Person {
    required string user_name       = 1;
    optional int64  favorite_number = 2;
    repeated string interests       = 3;
}

其对应的编码记录如下:

使用Protobuf编码的记录

Links