RPC | 青训营

98 阅读2分钟

RPC(远程函数调用)

远程函数调用用途大致就是,方法在这个服务端,执行函数的函数体在远程服务器上,该怎么告诉机器调用这个方法。(RPC的概念模型)

其中RPC要解决这几个问题

(以支付举例)

  1. 函数映射

    如果想让支付服务调用付款函数,而不是充值等其他服务,那么就要让这些函数有各自的ID,而且还得有二者的关系表,这样才能通过ID找到对应的函数
  2. 数据转换成字节流

    那么找到了对应的函数,又该如何去把参数发给远程的函数呢?本地调用是压到栈里直接去读;远程调用时服务端客户端是不同的进程,不能通过内存来传递参数,这时候就把客户端参数转换成字节流,传给服务端后,再从字节流转到能读取的格式(序列化和反序列化)
  3. 网络传输

    找服务,传参数,这两个操作都是在网络上进行的,那么我们怎么在网络上进行高效稳定的传输数据呢? 网络传输层把调用的ID和反序列化后的参数传输给服务端,再把算好的结果序列化传给客户端。

一次RPC的完整过程

  1. IDL文件

    首先,远程调用时我们不知道对方的方法及其参数的样子,所以需要有一种方式来确定两方的标准,这个描述文件就是IDL

  2. 生成代码

通过编译工具把IDL文件转换成语言对应的静态库

  1. 编解码

    从内存中表示字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化
  2. 通信协议

    规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据
  3. 网络传输

    通常居于成熟的网络库走TCP/UDP传输

RPC的好处

单一职责,有利于分工协作和运维开发(开发,部署,运维独立)
可扩展性强,资源使用率更优
故障隔离,服务的整体可靠性更高(模块化)

RPC的问题

服务宕机,对方应该如何处理
在调用过程中发生网络异常,如何保证消息的可达性
请求量徒增导致服务无法及时处理,有哪些应对措施