概念
RPC(Remote Procedure Call)远程过程调用-允许像调用本地服务一样调用远程服务
目的
在几个进程内(应用分布在不同的机器上),无法共用内存空间,或者在一台机器内通过本地调用无法完成相关的需求,比如不同的系统之间的通讯,甚至不同组织之间的通讯;可以用来解决单个服务器性能问题,横向拓展应用性能,即分布式
解决的问题
两个应用不在同一服务器,应用A调用应用B的API不能通过本地过程调用的方式?
实现原理
通过将要调用的API给的全局标示,将API放在一个表中。调用方调用服务时,通过查表将其API的标示得到,传给服务方标示和必要的参数;服务方得到标示,通过查找中间件得到具体的API,用参数调用该API,得到结果后将结果传给调用方。
- 建立通讯
- 服务寻址
- 网络传输
- 服务调用
RPC架构四个核心组件
- 客户端(Client):服务的调用方
- 客户端存根(Cilent Stub):存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方
- 服务端存根(Server Stub):接收客户端发送过来的消息,将消息解包,并调用本地的方法
-
- 服务端(Server):服务提供者
RPC过程
1、服务消费者(Client 客户端)通过本地调用的方式调用服务。
2、客户端存根(Client Stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体。
3、客户端存根(Client Stub)找到远程的服务地址,并且将消息通过网络发送给服务端。
4、服务端存根(Server Stub)收到消息后进行解码(反序列化操作)。
5、服务端存根(Server Stub)根据解码结果调用本地的服务进行相关处理
6、服务端(Server)本地服务业务处理。
7、处理结果返回给服务端存根(Server Stub)。
8、服务端存根(Server Stub)序列化结果。
9、服务端存根(Server Stub)将结果通过网络发送至消费方。
10、客户端存根(Client Stub)接收到消息,并进行解码(反序列化)。
11、服务消费方得到最终结果。