1. RPC调用需要解决的问题:
(1)函数映射:将远程调用的函数与本地函数建立映射关系
(2)数据序列化:将数据转换成字节流,以便在网络上传输
(3)网络传输:在网络中传输序列化的数据
2. 基本概念:
(1)IDL文件:接口定义语言文件,约定了接口规范,使得不同平台和不同语言的程序能够相互通信
(2)编码与解码:也称为序列化与反序列化,将内存中的数据转换为字节序列的过程称为编码
(3)生成代码:通过编译器工具将IDL文件转换成语言对应的静态库
2. 优点:
(1)单一职责:有利于分工协作和开发维护
(2)可扩展性强:资源利用率更优
(3)故障隔离:服务的整体可靠性更强
2. 可能遇到的问题:
(1)服务宕机:远程调用的服务停止运行
(2)网络异常:调用过程中发生网络异常,导致消息无法传递
(3)请求量突增:导致服务无法及时处理
2. RPC框架分层设计(以Apache Thrift为例):
(1) 编解码层:使用代码生成工具将IDL文件转换为不同语言的代码。
- 选择标准:兼容性、通用性、性能。
(2) 协议层:定义数据传输格式,负责序列化和反序列化数据,如JSON、二进制等。
- 每个协议单元以特殊字符"/r/n"作为结束标识。
- 变长协议:由不定长和定长组成。
(3) 网络通信层:使用Sockets API进行网络通信。
6. 关键指标:
(1) 稳定性:
- 熔断:保护调用方,防止调用的服务出现问题影响整个调用链。
- 限流:保护被调用方,防止大量请求超过其处理能力。
- 超时控制:避免资源浪费在不可用的节点上。
(2) 性能:
- 负载均衡
- 重试
- 处理长尾请求(响应耗时较久的请求):提高成功率,设置时间阈值进行重试。
(3) 易用性:
- 开箱即用:合理的默认参数选项和详尽的文档。
- 相关工具:代码生成工具、脚手架工具。
(4) 扩展性:
- 中间件:增加可插拔的中间件来扩展RPC框架的功能。