这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记
什么是RPC
RPC(Remote Procedure Call)远程过程调用,是一个允许一台计算机的程序调用另一地址空间(通常是网络中的另一台计算机)子程序的通讯协议。
在远程调用过程中,RPC会隐藏底层的通讯细节,对于两个程序方法而言,能够观测到的只有传入参数与传出返回值的过程,从使用形式上来看与本地调用类似,但实际参数是经过网络或其他方法远程传输的。
RPC流程包括
- 客户端将参数打包(marshalling)
- 客户端将打包后的数据发送至服务端
- 服务端将打包的数据解析(unmarshalling)
以通过网络传输的服务A与服务B之间的通信为例:
A将请求转为RPC消息->通过网络想B发送RPC消息->B将接受到的RPC消息转为调用请求
B执行调用的方法->将结果转为RPC消息->通过网络向A发送RPC消息->A将接受到的RPC消息转为请求结果
在请求与响应转化为RPC消息的过程中,可以通过IDL文件中立的描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以互现通信。
在RPC调用过程中,网络资源相比于计算与内存资源要珍贵的多,对于相同的数据,根据RPC消息的打包方式的不同,消耗的网络资源也不同,因此通过优化RPC的打包方式可以在一定程度上减少网络资源的使用。
RPC的好处
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源使用率更优
- 故障隔离,服务的整体可靠性更高
- 允许不同平台,不同程序在远程高效的调用各自的方法