Golang 微服务架构-1 | 青训营笔记

79 阅读2分钟

gRPC技术介绍

gRPC是 Google 开源的基于 Protobuf 和 Http2.0 协议的通信框架,Google 深度学习框架 tensorflow 底层的 RPC 通信就完全依赖于 gRPC 库。Google 的开源影响力很大,目前已经有非常多的大型互联网公司在使用 gRPC 了。比如国产开源数据库影响力最大的 Tidb 就选择了 gRPC 作为底层通讯库。

65739071138f4cbeb98dec3befa78154.png

整体的运作流程是:首先定义服务,指定其能够被远程调用的方法,包括参数和返回类型,这里使用protobuf来定义服务。在服务端实现定义的服务接口,并运行一个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线程到应用线程之间的切换,会导致性能的下降 所以一些私有协议不太友好).

服务端线程模型主要包括:

  • 服务端的写入,客户端的接入线程(HTTP/2 Acceptor)
  • 网络I/O的读写线程
  • 服务接口调用线程

客户端线程模型主要包含:

  • 客户端的链接 (HTTP/2 Connector)
  • 网络I/O读写线程
  • 接口调用线程
  • 响应回调通知线程