(二) RPC

2020-09-13  本文已影响0人  穿秋衣的李白

定义

RPC(Remote Procedure Call)远程过程调用,是一种进程间通信方式。通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。

结构

实现RPC的程序需要5个部分
1.User
2.User-stub
3.RPCRuntime
4.Server-stub
5.Server


RPC结构

这里 user 就是 client 端,当 user 想发起一个远程调用时,它实际是通过本地调用 user-stub。user-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。远端 RPCRuntime 实例收到请求后交给 server-stub 进行解码后发起本地端调用,调用结果再返回给 user 端。

以上是粗粒度的 RPC 实现概念结构,接下来我们进一步细化它应该由哪些组件构成,如下图所示。


细粒度RPC实现
  1. RpcServer
    负责导出(export)远程接口
  2. RpcClient
    负责导入(import)远程接口的代理实现
  3. RpcProxy
    远程接口的代理实现
  4. RpcInvoker
    客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回
    服务方实现:负责调用服务端接口的具体实现并返回调用结果
  5. RpcProtocol
    负责协议编/解码
  6. RpcConnector
    负责维持客户方和服务方的连接通道和发送数据到服务方
  7. RpcAcceptor
    负责接收客户方请求并返回请求结果
  8. RpcProcessor
    负责在服务方控制调用过程,包括管理调用线程池、超时时间等
  9. RpcChannel
    数据传输通道

工作原理

RPC的设计由Client,Client stub,Network ,Server stub,Server构成。

1. Client像调用本地服务似的调用远程服务;
2. Client stub接收到调用后,将方法、参数序列化
3. 客户端通过sockets将消息发送到服务端
4. Server stub 收到消息后进行解码(将消息对象反序列化)
5. Server stub 根据解码结果调用本地的服务
6. 本地服务执行(对于服务端来说是本地执行)并将结果返回给Server stub
7. Server stub将返回结果打包成消息(将结果消息对象序列化)
8. 服务端通过sockets将消息发送到客户端
9. Client stub接收到结果消息,并进行解码(将结果消息反序列化)
10. 客户端得到最终结果。

RPC 调用分以下两种:

作用

RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。通过RPC能解耦服务,这才是使用RPC的真正目的。

上一篇 下一篇

猜你喜欢

热点阅读