RPC分层模型|青训营笔记

72 阅读2分钟

RPC分层模型

1 概念介绍

1.1 基础概念

image-20241119091819036

1984 年 Nelson 发表了论文《Implementing Remote Procedure Calls》,其中提出了 RPC 的过程由 5 个模型组成:User、User-Stub、RPC-Runtime、Server-Stub、Server

1.2 一次RPC的过程

IDL (Interface Description Language)

IDL 是一种中立的方式来定义接口,使得在不同平台和语言之间可以实现对象的互操作和程序通信。

生成代码

通过编译器工具将 IDL 文件转换为对应语言的静态库。

编码与解码

编码是将内存中的表示转换为字节序列,解码则是将字节序列还原为内存表示。常称为序列化和反序列化。

通信协议

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

网络传输

基于成熟的网络库(如 TCP/UDP)完成数据的传输。

image-20241119092051691

1.3 RPC的好处
  1. 单一职责,有利于分工协作和运维开发
  2. 可扩展性强,资源使用率更有
  3. 故障隔离,服务的整体可靠性更高
1.4 问题
  1. 服务宕机,对方如何处理?
  2. 在调用过程中发生网络异常,如何保证消息的可达性?
  3. 请求量突增导致服务无法及时处理,有哪些应对措施?
1.5 小节
  1. 本地函数调用和RPC调用的区别:函数映射、数据转成字节流、网络传输
  2. RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server
  3. 一次RPC的完整过程,并讲解了RPC的基本概念定义
  4. RPC带来好处的同时也带来了不少新的问题,将由RPC框架来解决

2 RPC分层设计

2.1 分层设计 -以Apache Thrift为例

image-20241119093333626

2.2 编解码层 -生成代码

image-20241119093430105

2.3 编解码层 -数据格式
  • 语言特定的格式 许多编码语言都内建了将内存对象编码为字节序列的支持,例如java由java.io.Serializable
  • 文本格式 JSON、XML、CSV等文本格式,具有人类可读性
  • 二进制编码 具备跨语言和高性能等优点,常见有Thrift的BinaryProtocol、Protobuf等