这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记
1:RPC
RPC(Remote Procedure Call Protocol)远程过程调用协议。通俗的描述就是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。
2:一次RPC过程
IDL (Interface description language)文件
IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
生成代码
通过编译器工具把IDL文件转换成语言对应的静态库
编解码
从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化
通信协议
规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据
网络传输
通常基于成熟的网络库走TCP/UDP传输
3:RPC的优点/缺点
优点
1. 提升系统可扩展性
2. 提升系统可维护性和持续交付能力
3. 实现系统高可用
4.故障隔离,某个服务发生故障不会导致整体的崩溃,服务整体可靠性更高
缺点
1.被调用端可能会发生宕机
2.调用过程中可能会受到网络异常的影响从而导致消息无法及时送达
3.请求量突然增加可能会导致服务无法及时响应
4:RPC流程
Caller(调用端): GenCode(生成代码)->Encoder(代码转字节流)->Protocal(绑定协议)->Transfer(打包发送)
Callee(被调用端): Transfer-->Protocal-->Decoder->Gencoder (反解数据)
5:分层设计
6:RPC框架的关键指标
(1)稳定性
保障策略:
熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路,在被调用的服务出现问题时有一个兜底的方案
限流:保护被调用方.防止大流量把服务压垮
超时控制:避免浪费资源在某些不可用节点上
负载均衡:保证各服务节点的流量平均分配
重试:一定程度保证服务的正常响应,一定程度上消除因网络暂时中断带来的问题
(2)易用性: 有丰富的生成代码工具、脚手架工具
(3)扩展性:
Middleware:middleware 会被构造成一个有序调用链逐个执行,比如服务发现、路由、负载均衡、超时控制等
Option:作为初始化参数
核心层是支持扩展的:编解码、协议、网络传输层;代码生成工具也支持插件扩展
(4)观测性: Log 日志, Metric 监控, Tracing 链式跟踪。
(5)高性能:高吞吐低延迟