RPC框架角色
在RPC框架中有三个重要的角色:RPC Server、RPC Client和Registry,如下图所示:
- RPC Server:即Provider,暴露服务的服务提供者
- RPC Client:即Consumer,调用远程服务的服务消费者
- Registry:服务注册与发现的服务注册中心
RPC核心组件
RPC架构包含五个核心组件,Client,Client Stub,Server,Server Stub,NetWork Service,Stub可以理解为存根。
- Client:客户端,服务的调用方
- Client Stub:客户端存根,存放服务端的地址消息,负责将客户端的请求信息组装成网络消息,通过网络远程发送给服务提供方
- Server:服务端,真正的服务提供方
- Server Stub:服务端存根,接收客户端发来的消息,并将消息解压后调用本地服务方法
- NetWork Service:底层网络传输,可以是TCP或HTTP
RPC调用过程
RPC框架的整体调用过程,如下图所示:
- 客户端Client通过以本地调用的方式,调用远程接口服务;
- 客户端存根Client Stub接收到调用后,将调用信息对象进行序列化,组装成网络传输的二进制消息体;
- 客户端Client通过Sockets将消息发送到远程服务端;
- 服务端存根Server Stub收到消息后,对网络信息对象进行反序列化解码;
- 服务端存根Server Stub根据解码结果,调用服务端本地的接口服务;
- 本地接口服务执行,并将处理结果返回给服务端存根Server Stub;
- 服务端存根Server Stub将返回结果对象进行序列化,组装成消息体;
- 服务端Server再通过Sockets将消息发送到客户端;
- 客户端存根Client Stub收到结果消息后,对网络信息对象进行序列化解码;
- 客户端Client拿到最终接口处理结果。
RPC构架的目标是就是把2、3、4、7、8、9步骤都封装起来,让调用方感觉像是调用本地方法一样。
开源的RPC框架
- Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言
- Spring Cloud:相比Dubbo等RPC框架, Spring Cloud提供全套的分布式系统解决方案
- gRPC:是Google开发的高性能、通用的开源RPC框架,支持多种语言。