RPC 框架有 Hession、Thrift、gRPC 等。

gRPC

gPRC:Google 开源的高性能的 RPC 框架,gRPC 是一个可在任何环境中运行的现代开源高性能远程过程调用(RPC)框架。它可以高效地连接数据中心内和数据中心间的服务,并为负载平衡、跟踪、健康检查和身份验证提供可插拔的支持。它还适用于分布式计算,将设备、移动应用程序和浏览器连接到后端服务。

gRPC 的核心设计思路:

  1. 网络通信:gPRC 自己封装的网络通信,提供多种语言的网络通信;
  2. 协议:采用 HTTP2.0 协议;
  3. 序列化:采用 protobuf(Protocol Buffers), Google 开源的一种序列化方式。
  4. 代理的创建:stub(存根/桩)调用者像调用本地方法一样调用远端的方法。

HTTP2 传输数据使用的二进制数据内容,传输体量较小,支持双向流(双工)

gRPC 与 Thrift 都是支持异构语言的 RPC。

区别 Thrift gRPC
网络通信 TCP 专属协议(传输层协议,更快) HTTP2.0(应用层协议,相对于 Thrift 的 TCP 慢)
性能 Thrift 性能高于 gRPC -
使用范围 社区活跃 大厂背书,云原生时代,与其它组件合作顺利,所以 gRPC 应用更广

gRPC 的优点:

  1. 高效的进行进程间通信;
  2. 支持多语言,原生支持 C、GO、Java 实现。C 语言版本上扩展 C++、C#、NodeJS、Python、Ruby、PHP;
  3. 支持多平台;
  4. gRPC 序列化采用 protobuf,效率高;
  5. 使用 HTTP2.0 协议;

HTTP 协议

HTTP1.x

  • HTTP1.0:请求响应模式,短连接无状态协议;传输的数据主要是文本结构,单工协议(客户端请求服务端,服务端无法主动推送内容到客户端)
  • HTTP1.1:请求响应模式,有限的连接(Connection:keep-alived),会保持一段时间,减少传输的数据(有时候刷新页面但是 SSL 并不刷新);升级的方式:WebScoket 协议实现双工,实现服务端向客户端推送。

HTTP1.x 主要有以下特点:

  • 传输数据文本格式,可读性好但是效率差;
  • 本质上 无法实现双工通信;
  • 请求资源需要发送多次请求,建立多个连接;

HTTP 协议基于 TCP 协议(长连接),但是有自己的设计实现,响应之后会自己断掉,所以 HTTP 是短连接协议。

HTTP2.0

  • 二进制协议,效率高于 HTTP1.x,可读性差;
  • 可以实现双工通信;
  • 采用多路复用技术,一个请求/连接可以请求多个数据;

HTTP2.0 协议的三个概念:

  1. 数据流(stream)
  2. 消息(message)
  3. 帧(frame)

如上图所示,一次连接发送多个流,流中带有消息,消息由帧组成,帧中包含了请求或者响应的数据。在 HTTP2.0 的设计中,可以通过为不同的 stream 设置权重,来限制不同流的传输顺序,比如先发送 css stream 还是 js stream;
并且,如果 Client 发送的数据太快,Server 处理不过来,则可以通知 Client 暂停数据的发送实现流控。

序列化

protobuf 是一种与编程语言无关,与具体的平台无关,定义的中间语言,可以在 client 和 server 中进行 RPC 的数据传输。protobuf 有两个版本,proto2、proto3,目前主流应用是 proto3。

使用 protobuf 需要安装对应的编译器,需要把 protouf 的 IDL 语言转换成具体的编程语言。


本站由 江湖浪子 使用 Stellar 1.28.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。