深入浅出RPC框架| 青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
基本概念
IDL文件
通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
生成代码
通过编译器工具吧IDL文件转换成语言对应的静态库
编解码
从内存中表示到字节序列的转换称为编码,反之称为解码,也常叫做序列化与反序列化
通信协议
规范了数据在网络中的传输内容和格式,出必须的响应和请求数据外,还需要额外的通信数据
RPC的好处
- 单一职责,有利于分工协作和运维开发
- 可拓展性强,资源使用率更优
- 故障隔离,服务的整体可靠性更高
RPC带来的问题
- 服务宕机,对方应该如何处理
- 在调用过程中发生网络异常,如何保证消息的可达性
- 请求量突增导致服务无法及时处理,有哪些应对措施
编解码层
生成代码
数据格式
- 语言特定的格式:例如java的java.io.Serialiazble
- 文本格式 :比如JSON,XML,CSV,具有可读性
- 二进制编码:具备跨语言高性能,Thrift的BinaryProtocol,Protobuf
选型
- 兼容性:支持自动增加新的字段,而不印象老的服务,这将提高系统的灵活度
- 通用性:跨平台、跨语言
- 性能:从空间和时间两个维度考虑
协议层
概念
- 特殊结束符:一个特殊字符作为每个协议单元结束的标识
- 变长协议:以定长加不定长的部分组成,其中定长部门需要描述不定长内容的长度
协议构造
协议解析
网络通信层
Sockets-Api
稳定性
保护策略
- 熔断:保护调用方,防止被调用的服务出现问题而影响整个链路
- 限流:保护被调用方,防止大流量把服务压垮
- 超时控制:避免浪费资源在不可用节点上
- 这三种策略都可以笼统归为降级措施
请求成功率
- 负载均衡
- 重试
长尾请求(Backup Request)
注册中间件
易用性
- 开箱即用:合理的默认参数选项、丰富的文档
- 周边工具:生成代码工具、脚手架工具