(转)RPC原理详解
转自:http://www.open-open.com/lib/view/open1425797146897.html
RPC功能目标
RPC的主要功能目标是让构建分布式计算(应用)更加容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。
为实现该目标,RPC框架需提供一种透明的调用机制使使用者不必显式区分本地调用与远程调用
RPC调用分类:
RPC调用可以分为两种:
1)同步调用:客户方等待调用执行完成并返回执行结果
2)异步调用:客户方调用后不用等待执行结果返回,但依然可以通过回调方式获取执行结果
RPC结构拆解
RPC服务方通过RPCServer导出(export)远程接口方法,RPC客户方通过RPCClient导入(import)远程接口方法
客户方:
像调用本地方法一样调用远程接口方法,RPC框架实现接口的代理实现,实际的调用委托给代理RPCProxy
代理PRCProxy封装调用信息并将调用转交给PRCInvoker去实际执行
客户端的RPCInvoker通过连接器RPCConnector维持与服务端的通道RPCChannel,使用PRCProtocol执行协议编码,并将编码后的请求消息通过通道发送给服务方
服务方:
通过接收器RPCAcceptor接受客户端的调用请求,同样使用RPCProtocol执行协议解码
解码后的调用信息传递给RPCProcessor去控制处理调用过程
最后委托给PRCInvoker去实际执行调用并放回执行结果
各组件职责规划:
- RpcServer
负责导出(export)远程接口 - RpcClient
负责导入(import)远程接口的代理实现 - RpcProxy
远程接口的代理实现 - RpcInvoker
客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回
服务方实现:负责调用服务端接口的具体实现并返回调用结果 - RpcProtocol
负责协议编/解码 - RpcConnector
负责维持客户方和服务方的连接通道和发送数据到服务方 - RpcAcceptor
负责接收客户方请求并返回请求结果 - RpcProcessor
负责在服务方控制调用过程,包括管理调用线程池、超时时间等 - RpcChannel
数据传输通道