1. grpc技术介绍
1. grpc介绍
gRPC
是 Google 开源的基于 Protobuf 和 Http2.0 协议的通信框架,Google 深度学习框架 tensorflow 底层的 RPC 通信就完全依赖于 gRPC 库。Google 的开源影响力很大,目前已经有非常多的大型互联网公司在使用 gRPC 了。比如国产开源数据库影响力最大的 Tidb 就选择了 gRPC 作为底层通讯库。
2. grpc基于Http2.0原因
gRPC
之所以选择 Http2.0
作为基础开源协议,是考虑到 Http 协议在互联网应用的广泛性。同时因为 Http2.0 支持的 Streaming 和 Duplexing 可以将请求和响应消息进行分片交叉传送,可以大幅提升传输效率,GRPC 特色的 Stream 消息正是使用了 Http2.0 的 Streaming 特性。
关于HTTP2.0
大家下来自行研究哈,这不是本文重点内容。
3. grpc架构图
首先定义服务,指定其能够被远程调用的方法,包括参数和返回类型,这里使用protobuf来定义服务。在服务端实现定义的服务接口,并运行一个gRPC服务器来处理客户端调用。
4. grpc原理
- gRPC消息由netty /http/2 协议负责接入,通过grpc 注册的Http2Framelister将解码后的Http header和Http body 发送到gRPC的NettyServerHandler ,实现netty http/2的消息接入
- gRPC 的线程模型遵循 Netty 的线程分工原则,即:协议层消息的接收和编解码由 Netty 的 I/O(NioEventLoop) 线程负责;后续应用层的处理由应用线程负责,防止由于应用处理耗时而阻塞 Netty 的 I/O 线程 (因为分工原则,grpc 之间会做频繁的线程切换,如果在一次grpc调用过程中,做了多次I/O线程到应用线程之间的切换,会导致性能的下降 所以一些私有协议不太友好)
5. grpc模型
异步非阻塞的线程模型
服务端线程模型主要包括
- 服务端的写入,客户端的接入线程(HTTP/2 Acceptor)
- 网络I/O的读写线程
- 服务接口调用线程
客户端线程模型主要包含
- 客户端的链接 (HTTP/2 Connector)
- 网络I/O读写线程
- 接口调用线程
- 响应回调通知线程
6. grpc优势
- 多语言 Grpc的多语言是他做的很牛逼的地方,特别是在设备端,客户端支持ios,android,而基于http2.0的多路复用也的确让设备真正的省了流量,省了电,也省了空间
- 基于Http2.0 采用HTTP2的好处在于,因为添加了头信息,可以方便在框架层面对调用做拦截和控制(比如说限流,调用链分析,安全认证等)而且http2为标准协议,也方便以后扩展兼容其它调用端。
7. 小结
这篇文章主要是对原理和概念介绍,下篇文章我们以实战为主,重点讲解golang+grpc+protobuf+gateway的技术应用,欢迎大家转发关注和分享哈。