JAVA RPC:从上手到爱不释手

RPC简介

RPC(Remote Procedure Call Protocol),远程过程调用,指的是像调用本地服务一样调用服务器的服务。

按照相应方式,RPC分为两种:

  1. 同步调用:客户端调用服务方方法,等待,直到返回结果或超时,再返回继续操作。
  2. 异步调用:客户端把消息发送给中间件,返回继续操作。

RPC架构包含四个组件:

  1. 客户端(Client):服务调用方
  2. 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方。
  3. 服务端存根(Sever Stub):接受客户端发过来的消息并解包,再调用本地服务。
  4. 服务端(Server):真正的服务提供者。

具体步骤:

  1. Client以本地调用方式调用服务。
  2. Client Stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体。
  3. Client Stub找到服务地址,并将消息通过网络发送到Server Stub。
  4. Server Stub收到消息后进行解码,根据解码结果调用Server服务。
  5. Server服务执行处理逻辑,将结果返回给Server Stub。
  6. Server Stub将返回结果打包后通过网络发送给Client Stub。
  7. Client Stub接受消息,解码,将解码结果(即最终结果)给Client。
  8. Client得到调用服务的最终结果。

RPC框架将2-7步封装,使用户能像调用本地服务一样调用远程服务。

RPC模块详解

  1. 服务端(Server):RPC服务的提供者,负责将RPC服务导出。
  2. 客户端(Client):RPC服务的消费者,负责调用RPC服务。
  3. 代理(Proxy):通过动态代理,提供对远程接口的代理实现。
  4. 执行器(Invoker):
  1. 对于客户端:主要负责服务调用的编码,调用请求发送和等待结果返回。
  2. 对于服务方:负责处理调用逻辑并返回调用结果。
  1. 协议管理(Protocol):协议管理组件,负责整个RPC通信协议的编/解码。
  2. 连接端口(Processor):负责维持客户方和服务方的长连接通道。
  3. 后台处理(Processor):负责整个调用服务中的管理调度,包括线程池,分发,异常处理等。
  4. 连接通道(Channel):客户端和服务端的数据传输通道。