浅学RPC

RPC(Remote Procedure Call Protocol),远程过程调用协议,允许想调用本地服务一样调用远程服务,而不用关注调用的细节,文格式为二进制,网络协议为TCP/HTTP/HTTP2。

RPC是一种协议,典型的RPC框架有:Dubbo,Thrift,GPRC,Hetty。

RPC的主要角色:

  • RPC Server:即Provider,暴露服务的服务提供者
  • RPC Client:即Consumer,调用远程服务的服务消费者
  • Registry:注册中心,服务注册与发现的服务注册中心

实现RPC的的关键:

Call ID映射:需要对注册中心调用哪个函数;所有函数要有自己唯一的ID,客户端远程调用时附上这个ID,需要一个函数和Call ID的对应表 。

序列化和反序列化:客户端与服务端的传参问题;

数据网络传输:远程调用机遇网络连接,数据需要网络传输,GPRC用的HTTP2,Java用的Netty。

RPC的主要组成部分:

  • 客户端(client),服务的调用方。
  • 客户端存根(client stub),存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
  • 服务端(server),真正的服务提供者。
  • 服务端存根(server stub),接收客户端发送过来的消息,将消息解包,并调用本地的方法。
  • 底层网络传输(network service),可以是TCP或HTTP

RPC框架调用过程

  1. 客户端client通过以本地调用的方式,调用远程接口服务;
  2. 客户端存根client stub接收到调用后,将调用信息对象进行序列化,组装成网络传输的二进制消息体;
  3. 客户端client通过sockets将消息发送到远程服务端;
  4. 服务端存根server stub收到消息后,对网络信息对象进行反序列化解码;
  5. 服务端存根server stub根据解码结果,调用服务端本地的接口服务;
  6. 本地接口服务执行,并将处理结果返回给服务端存根server stub;
  7. 服务端存根server stub将返回结果对象进行序列化,组装成消息体;
  8. 服务端server再通过sockets将消息发送到客户端;
  9. 客户端存根client stub收到结果消息后,对网络信息对象进行序列化解码;
  10. 客户端client拿到最终接口处理结果。

猜你喜欢

转载自blog.csdn.net/Xu_programmer/article/details/124397218
RPC