暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

1. 微服务架构上篇:1. grpc技术介绍

堆栈future 2021-09-17
1192

1. 微服务架构上篇

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原理

  1. gRPC消息由netty /http/2 协议负责接入,通过grpc 注册的Http2Framelister将解码后的Http header和Http body 发送到gRPC的NettyServerHandler ,实现netty http/2的消息接入

  2. gRPC 的线程模型遵循 Netty 的线程分工原则,即:协议层消息的接收和编解码由 Netty 的 I/O(NioEventLoop) 线程负责;后续应用层的处理由应用线程负责,防止由于应用处理耗时而阻塞 Netty 的 I/O 线程 (因为分工原则,grpc 之间会做频繁的线程切换,如果在一次grpc调用过程中,做了多次I/O线程到应用线程之间的切换,会导致性能的下降 所以一些私有协议不太友好)

5. grpc模型

异步非阻塞的线程模型

服务端线程模型主要包括

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

客户端线程模型主要包含

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

6. grpc优势

  • 多语言 Grpc的多语言是他做的很牛逼的地方,特别是在设备端,客户端支持ios,android,而基于http2.0的多路复用也的确让设备真正的省了流量,省了电,也省了空间

  • 基于Http2.0 采用HTTP2的好处在于,因为添加了头信息,可以方便在框架层面对调用做拦截和控制(比如说限流,调用链分析,安全认证等)而且http2为标准协议,也方便以后扩展兼容其它调用端。

7. 小结

这篇文章主要是对原理和概念介绍,下篇文章我们以实战为主,重点讲解golang+grpc+protobuf+gateway的技术应用,欢迎大家转发关注和分享哈。

文章转载自堆栈future,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论