微服务之RPC通信(第二十七天)

RPC通信

RPC,远程调用方式(Remote Procedure Call),RPC像调用本地方法一样调用别的机器上的方法,屏蔽了用户与服务器,服务器与服务器之间的通讯。

微服务之RPC通信(第二十七天)微服务之RPC通信(第二十七天)

  • 客户端(Client),服务的调用方。
  • 服务端(Server),真正的服务提供者。
  • 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
  • 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法。
  • Stub层主要是数据通信的协议,是数据的打包 、发送,解析、处理、打包、发送、解析的过程。有xml、json、protocol 等,它们各自都带有自己特有的封装解封装方法,封装解封装主要解决两个问题:
    1、压缩数据,减少传输数据量;
    2、数据结构中字段的映射关系;
    客户端的应用发起一个远程调用时,调用客户端的 Stub。负责将调用的接口、方法和参数,通过约定的协议规范进行编码,并通过本地的 RPCRuntime 进行传输,将调用网络包发送到服务器。服务器端的 RPCRuntime 收到请求后,交给服务器端的 Stub 进行解码,然后调用服务端的方法,服务端执行方法,返回结果,服务器端的 Stub 将返回结果编码后,发送给客户端,客户端的 RPCRuntime 收到结果,发给客户端的 Stub 解码得到结果,返回给客户端。

1、对于客户端而言,这些过程是透明的,就像本地调用一样;服务端处理业务逻辑,实现。
2、对于 Stub 层,处理双方约定好的语法、语义、封装、解封装。
3、对于 RPCRuntime,主要处理高性能的传输,以及网络的错误和异常。

RPC:
RPC主要是基于TCP/IP协议的,因为RPC效率更高,而HTTP服务开发迭代更快
HTTP服务:
接口不多、系统与系统交互较少的情况下,简单、直接、开发方便
接口可能返回一个JSON或者是XML,然后服务器侧进行Cjson进行转化。

流行的开源RPC框架三种:

  • gRPC是Google公布的开源软件,基于最新的HTTP2.0协议,支持常见的众多编程语言。 HTTP2.0是基于二进制的HTTP协议升级版本,底层使用到了Netty框架的支持。
  • Thrift是Facebook的开源项目,跨语言的服务开发框架。
  • Dubbo是阿里开源的RPC框架,远程接口是基于Java Interface,依托于spring框架方便开发。