RPC 框架 | 青训营

86 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第 5 篇笔记 RPC(Remote Procedure Calls) ,远程函数调用,能让我们像调用本地服务一样调用远程服务,常用于解决分布式系统中服务之间的调用问题(函数映射、数据转换成字节流,网络传输)。 具有以下优点:

  • 单一职责,有利于分工协作和运维开发
  • 可扩展性强,高资源使用率
  • 故障隔离,服务的整体可靠性更高

由于服务在远端,RPC 模式也会带来一些问题,比如:服务宕机、调用时网络异常,消息难以传达,请求量突增导致服务无法及时处理。这些问题将由 RPC 框架来解决。

分层设计

RPC 框架的核心有三层:编解码层、协议层和网络通信层

编解码层

编解码:从内存中表示到字节序列的转换称为编码,反正为解码,也常叫做序列化和反序列化。

编解码层会把 客户端服务端 依赖的 IDL(Interface description language) 文件 编码成不同语言的 CodeGen ,使得不同编程语言、不同平台上运行的程序可以互相通信。

协议层

协议是双方确定的交流语义。比如,在 HTTP 协议中,协议头以回车和换行符号结尾。

编解码层解决了跨语言的数据交换格式,但是,本地远端 之间通讯还需要制定通讯协议,规定数据是如何传输的。协议层中规范了数据在网络中的传输内容和格式,除必须的请求和响应数据外,通常还会包含额外的元数据。

网络通信层

网络通信层连接本地和远端。它封装了底层 Socket API,连接管理和时间分发,支持常见的网络协议,提供异常处理。