gRPC是一款基于Http/2协议传输,使用Protocol Buffers进行序列化的高性能开源RPC框架,支持多种开发语言以及跨语言通信。以上是gRPC的见解,也是其优势所在,gRPC的优势由Http/2和Protobuf继承而来。
- 高效的传输协议:gRPC基于Http/2协议传输,具有多路复用、服务端推送和流量控制等功能,能够提高网络传输的效率。
- 跨语言兼容性:gRPC使用Protocol Buffers进行序列化,支持多种编程语言,能够提供强大的统一跨语言能力。
- 丰富的生态环境:gRPC已经成为云原生环境中的事实标准协议,并得到了k8s、etcd等组件的天然支持。
Http/2
由于使用了Http/2,gRPC天然享受Http/2带来的诸多优越特性:
- 多路复用:Http/2使用了多路复用技术,允许在同一个Tcp连接同时发送多个请求和接收多个响应,提升了并发性能、降低了响应延迟。
- 头部数据压缩:Http/2使用HPACK算法压缩头部数据(Header),在服务器与客户端维护头信息表,通过序号(索引)来表示字段key,并对字段value使用哈夫曼编码压缩数据,减少了头部数据两,进一步提升传输效率。
- 二进制格式:Http/2的头信息和数据体都是二进制数据,称为帧(Frame),并且每个请求的数据包可以被分割为多个二进制,减少了网络开销。
- 服务器推送:Http/2允许服务器主动向客户端推送资源。
- 流量控制:。。。。。。
- 。。。。
ProtoBuf
序列化协议是RPC框架重要的组成部分,客户端使用序列化协议将内存数据转换为二进制数据,服务端接收到后将二进制数据再转换为内存数据。序列化协议对RPC框架在网络传输方面的性能起着至关重要的影响。
gRPC使用Protocol Buffers 进行序列化,将数据结构以.proto文件进行描述,通过代码生成工具(protoc)可以生成对应数据结构的POJO对象和相关方法。
- 优点:码流小、性能高。ProtoBuf序列化后的码流相对于其他结构化数据存储格式,例如XML、JSON等,更小跟紧凑,能够提高数据传输的效率。ProtoBuf采用结构化的数据存储格式,能够更容易地定义和描述数据结构,更易于管理和维护。
- 缺点:需要依赖于工具生成代码、增加了学习成本和开发成本。可读性也不如JSON、XML。