gRPC(Google Remote Procedure Calls)
- 介绍
gRPC是一个高性能、开源、通用的RPC框架,面向移动和HTTP/2设计,是由google发布的基于Protocol Buffers
的RPC框架。 gRPC基于HTTP/2标准设计,带来诸如双向流、头部压缩、单TCP连接上的多复用请求等等特性。省电且省空间占用。 - 关键词
HTTP/2、Protocol Buffers - 教程
gRPC https://grpc.io/docs/tutorials/basic/go.html
Protocol Buffers
-
介绍
Protocol buffers 是一种语言中立,平台无关,可扩展的序列化数据的格式,可用于通信协议,数据存储等。
Protocol buffers 在序列化数据方面,它是灵活的,高效的。相比于 Json、XML 来说,Protocol buffers 更加小巧,更加快速,更加简单。一旦定义了要处理的数据的数据结构之后,就可以利用 Protocol buffers 的代码生成工具生成相关的代码。只需使用 Protobuf 对数据结构进行一次描述,即可利用各种不同语言或从各种不同数据流中对你的结构化数据轻松读写。
Protocol buffers 很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 -
Varints编码思想
- 了解PB encoding之前,可以先来了解一下varint。Varint 是一种紧凑的表示数字的方法。它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数字的字节数。每个字节的前7个bit来表示数据,而最高位的bit(MSB,Most Significant Bit)则用作记号(flag)
- LevelDB内部通过采用变长编码,对数据进行压缩来减少存储空间,采用CRC进行数据正确性校验。下面就对varint编码进行学习。
- 传统的integer是以32位来表示的,存储需要4个字节,当如果整数大小在256以内,那么只需要用一个字节就可以存储这个整数,这样就可以节省3个字节的存储空间,Google varint就是根据这种思想来序列化整数的
- 优点
体积小:序列化后,数据大小可缩小约3倍
维护成本底:多个平台(golang、java、python、c等等)仅需维护一套对象协议文件(.proto)
缺点
二进制数据流方式存储(不可读),需要通过.proto文件才能了解数据结构 - 使用过程
发送发:序列化消息
接收方:反序列化消息
依赖环境
-
Protocol Buffers3 编译器
https://github.com/protocolbuffers/protobuf/releases
安装
$ tar -xzf protobuf-3.6.1.tar.gz
$ cd protobuf-3.6.1
./configure --prefix=$INSTALL_DIR
$ make && make install
版本
$ protoc --version -
golang grpc插件
$ go get google.golang.org/grpc -
golang protoc插件
$ go get -u