梗概
- RPC(Remote Procedure Call)远程过程调用协议,是一种通过网络从远程计算机上请求服务
- RPC类似一种高度封装的请求代理方。提供方只需要提供方法,调用方只需要调用具体RPC库封装出来的方法,就能完成双方通讯
- 具体实现方式:gRPC、tRPC、腾讯trpc
图解

RPC通用架构详解
图解

- Stub或Proxy:直接与客户端交互
- 客户端不需自行去管理消息格式、不可能自己去管理网络传输协议,也不可能自己去判断调用过程是否有异常。这一切工作在客户端都是交给RPC框架中的“代理”层来处理的。
- Message Protocol:负责处理用以传输的消息(数据)格式
- 一次完整的client-server的交互肯定是携带某种两端都能识别的,共同约定的消息格式。RPC的消息管理层专门对网络传输所承载的消息信息进行编号和解码操作。
- 目前流行的技术趋势是不同的RPC实现
- ransfer/Network Protocol:传输协议层负责管理RPC框架所使用的网络协议、网络IO模型。
- 例如Hessian的传输协议基于HTTP(应用层协议);而Thrift的传输协议基于TCP(传输层协议)。传输层还需要统一RPC客户端和RPC服务端所使用的IO模型;
- Selector/Processor:直接与服务端交互,通常负责了包括:管理RPC接口的注册、判断客户端的请求权限、控制接口实现类的执行在内的各种工作。
- 存在于RPC服务端,由于服务器端某一个RPC接口的实现的特性(它并不知道自己是一个将要被RPC提供给第三方系统调用的服务)。所以在RPC框架中应该有一种“负责执行RPC接口实现”的角色。
- 示例:selector
- IDL:负责跨语言调用
- 找到一个各种语言能够理解的消息结构、接口定义的描述形式。
- 实际上IDL(接口定义语言)并不是RPC实现中所必须的。但是需要跨语言的RPC框架一定会有IDL部分的存在。如果您的RPC实现没有考虑跨语言性,那么IDL部分就不需要包括,
- 例如JAVA RMI因为就是为了在JAVA语言间进行使用,所以JAVA RMI就没有相应的IDL。
适用范围
优点
- RPC的主要功能目标是让构建分布式计算(应用)更容易,
- 提供强大的远程调用能力时不损失本地调用的语义简洁性。
- 性能高:RPC是直接调用远程函数,所以其性能通常比HTTP好。
- 透明性好:RPC框架可以屏蔽底层的网络通信细节,使得远程调用就像本地调用一样简单。
- 可扩展性好:RPC框架可以支持多种协议和编码方式,可以适应不同的应用场景。
- 可靠性高:RPC框架可以提供多种容错机制,保证系统的可靠性。
缺点
- 语言限制:RPC框架通常只支持特定的编程语言。
- 开发难度大:RPC框架需要开发者具备一定的分布式系统开发经验。
- 部署复杂:RPC框架需要部署在服务器上,需要一定的运维经验。