干货:分布式基础-RPC你值得了解一下
Posted SpringForAll社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货:分布式基础-RPC你值得了解一下相关的知识,希望对你有一定的参考价值。
本文来源:http://8rr.co/nx4n
rpc
RPC 是什么?
rpc结构
RPC 这个概念术语在上世纪 80 年代由 Bruce Jay Nelson 提出,参考他的论文Implementing Remote Procedure Calls。
Nelson 的论文中指出实现 RPC 的程序包括 5 个部分:
-
User -
User-stub -
RPCRuntime -
Server-stub -
Server
这 5 个部分的关系如下图所示
这里 user 就是 client 端,当 user 想发起一个远程调用时,它实际是通过本地调用 user-stub。user-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。远端 RPCRuntime 实例收到请求后交给 server-stub 进行解码后发起本地端调用,调用结果再返回给 user 端。
RPC 调用分类
RPC 调用分以下两种:
-
同步调用:客户方等待调用执行完成并返回结果。 -
异步调用:客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。
异步和同步的区分在于是否等待服务端执行完成并返回结果。
RPC 结构拆解
rpc的详细组件如下:
RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。代理封装调用信息并将调用转交给RpcInvoker 去实际执行。在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。
RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用RpcProtocol 执行协议解码(decode)。解码后的调用信息传递给RpcProcessor 去控制处理调用过程,最后再委托调用给RpcInvoker 去实际执行并返回调用结果。
RPC 组件职责
各个组件的职责如下:
-
RpcServer:负责导出(export)远程接口 -
RpcClient:负责导入(import)远程接口的代理实现 -
RpcProxy:远程接口的代理实现 -
RpcInvoker:客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回;服务方实现:负责调用服务端接口的具体实现并返回调用结果 -
RpcProtocol:负责协议编/解码 -
RpcConnector:负责维持客户方和服务方的连接通道和发送数据到服务方 -
RpcAcceptor:负责接收客户方请求并返回请求结果 -
RpcProcessor:负责在服务方控制调用过程,包括管理调用线程池、超时时间等 -
RpcChannel:数据传输通道
总结
深入浅出 RPC - 浅出篇https://blog.csdn.net/mindfloating/article/details/39473807
深入浅出 RPC - 深入篇https://blog.csdn.net/mindfloating/article/details/39474123
如果资源对你有帮助的话
❤️ 给个 「在看」 ,是最大的支持❤️
以上是关于干货:分布式基础-RPC你值得了解一下的主要内容,如果未能解决你的问题,请参考以下文章