protobuffer总结

2022-07-13 15:32:38 浏览数 (1)

protobuffer是一种语言无关、平台无关的数据协议,优点在于压缩性好,可扩展,标准化,常用于数据传输、持久化存储等。

架构架构

实现原理

protobuffer协议

1 压缩性好(相比于同样跨平台、跨语言的json)

  • 去除字段定义,分隔符(引号,冒号,逗号)
  • 压缩数字,因为日常经常使用到的比较小的数字,实际有效的字节数没有4个字节
  • 采用TLV的数据存储方式:减少了分隔符的使用 & 数据存储得紧凑

varint和zigzag算法:对数字进行压缩

protobuffer协议去除字段定义,分隔符

这里有几篇文章对protobuffer总结的很好

https://learnku.com/articles/32974

https://cloud.tencent.com/developer/article/1520442

https://www.pudn.com/news/628f82d2bf399b7f351e4c8d.html

2 可拓展

protobuffer并不是一个自解析的协议(json自解析key),需要pb的meta数据解析,牺牲了可读性,但在大规模的数据处理是可以接受的。可拓展性在于protobuffer中追加定义,新旧版本是可以兼容的,但是定义是严格有序的。

3 标准化

protobuffer生态提供了完整的工具链,protobuffer提供官方的生成golang/java等实现插件,这样protobuffer字节码的各语言版本的序列化、反序列化是标准化的,也包括插件生成代码封装。以及标准化的常用工具,比如doc-gen、grpc-gen、grpc-gateway-gen等工具。

典型应用

gRPC

protobuffer封装

需要注意

1 pb结构封装的字段标序是不能更改的,否则解析错乱;

2 pb结构尽量把必选类型,比如int、bool放在filedNum<=16;可得到更好的varint压缩效果;

3 grpc-client使用时,req是指针类型,务必不要重复复制,尽量new request,否则编码时会错乱;

0 人点赞