RPC分层模型
1 概念介绍
1.1 基础概念
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)完成数据的传输。
1.3 RPC的好处
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源使用率更有
- 故障隔离,服务的整体可靠性更高
1.4 问题
- 服务宕机,对方如何处理?
- 在调用过程中发生网络异常,如何保证消息的可达性?
- 请求量突增导致服务无法及时处理,有哪些应对措施?
1.5 小节
- 本地函数调用和RPC调用的区别:函数映射、数据转成字节流、网络传输
- RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server
- 一次RPC的完整过程,并讲解了RPC的基本概念定义
- RPC带来好处的同时也带来了不少新的问题,将由RPC框架来解决
2 RPC分层设计
2.1 分层设计 -以Apache Thrift为例
2.2 编解码层 -生成代码
2.3 编解码层 -数据格式
- 语言特定的格式 许多编码语言都内建了将内存对象编码为字节序列的支持,例如java由java.io.Serializable
- 文本格式 JSON、XML、CSV等文本格式,具有人类可读性
- 二进制编码 具备跨语言和高性能等优点,常见有Thrift的BinaryProtocol、Protobuf等