微服务组件之proto
protobuf
-
和平台、语言无关的一种序列化的数据格式,适合用来做数据存储和作为不同语言、应用、平台之间相互通信的数据格式,只要实现proto的不同语言版本,加入不同的工程中,其他语言就可以解析出序列化的数据,官网目前提供C++、Python、Java、Go。08年开源。
-
格式对比
- json:一般的web项目中主要使用的是json,浏览器对json支持非常好,内建的函数支持。
- xml:在webservice中应用比较广泛,相比json会显得更加的荣誉,json使用键值对的方式,可以压缩空间,还有可读性。
- protobuf:后起之秀,google开源的数据格式,适合高性能,对响应速度有要求的数据传输场景,因为是二进制的所以不可读,只有反序列化之后才具有可读性。
- protobuf优势:
- 序列化之后体积更小
- 支持跨平台多语言
- 兼容性不错,消息格式升级
- 反序列化快
-
可以定义自己的数据结构然后使用代码生成器生成的代码来读写这个数据节,可以不用重新部署就可以更新数据结构。有良好的向后兼容的特性,不必破坏原有的老的数据格式就可以升级。但是,他有不足,无法表示复杂的概念,同时在通用性上可能不及xml等,protobuf不能被人直接读写。
安装Protobuf
- https://zhuanlan.zhihu.com/p/160249058
- 获取go的操作包,
go get -v -u github.com/golang/protobuf/proto
et@ubuntu:~/Desktop/Projects/beego/unioj/pkg/mod/github.com/golang$ cd protobuf@v1.4.2/
et@ubuntu:~/Desktop/Projects/beego/unioj/pkg/mod/github.com/golang/protobuf@v1.4.2$ ls
AUTHORS CONTRIBUTORS README.md go.mod internal proto ptypes test.bash
CONTRIBUTING.md LICENSE descriptor go.sum jsonpb protoc-gen-go regenerate.bash
et@ubuntu:~/Desktop