(4)SOFARPC 单机故障剔除剖析
发布网友
发布时间:2022-11-26 20:25
我来回答
共1个回答
热心网友
时间:2023-10-12 10:52
二. 单机故障和服务降级
2.1 SOFARPC故障剔除 vs 注册中心故障剔除
2.2 服务权重降级 vs 服务降级
三. 单机故障原理解析
3.1 整体结构和入口
3.2 信息收集器(数据结构、窗口计算)
3.3 度量策略 3.4 计算策略 3.5 降级策略 3.6 恢复策略
问题: 大量资金操作,网络、硬件导致系统不稳定,影响用户体验,资损。
可用性常见方案 集群(冗余) ,避免单点问题, 避免不了 某些场景 单机故障引起服务调用失败
解决: SOFARPC 提供 自动单机故障剔除能力 ,自动 监控 RPC 调用 情况,对 故障节点 进行 权重降级 ,节点恢复健康时进行 权重恢复 ,提高系统可用性。
硬件负载 (每次请求都需要经过):集群规模增加、流量增多,无法支撑。
软负载: 提供 注册中心 ,将 负载能力 转移到 服务调用方 ( Consumer ),注册中心只有在 Consumer 首次订阅 或服务发生 变化 时才会 发生交互 , 避免 了并发访问下 单点问题 :
软负载 以下场景导致服务不可用:
(1) 挂: Provider (单点故障或宕机),与 Consumer 长连接断开 , 注册中心 尚未 摘除 或 未及时通知Consumer
(2)不好: 长连存在 , 注册中心未下发摘除 , 服务器 端由于某些原因 超时、异常 率高,如长时间 Full GC、硬件故障 、压力瓶颈。(此现象服务节点为 亚健康服务节点 )。
1不调用,2少调用;通过 权重控制 。流量到正常服务机器上。
SOFARPC 的 故障剔除 与 注册中心 故障服务 剔除 区别:
故障剔除的 时机、细粒度
1)注册中心 服务管理关注 Provider 与注册中心的 心跳或长连接 。如 Provider 心跳 异常 或长连接 不在 ,将服务从注册中心 剔除 ,告知 Consumer 移除本地缓存 的故障 Provider 信息。Comsumer 负载均衡选择时 不考虑被剔除 Provider:
2)SOFARPC 单机故障剔除:针对 注册中心未剔除服务 ,与 Consumer 仍然保持 长连接 ,但亚健康状态,不能提供正常服务:
注册中心剔除 : 单机上 某个服务进程(进程级别)。和注册中心 断开连接或无心跳 ,则从注册中心 剔除 。
SOFARPC 故障剔除 :细致到 进程对外暴露服务 (IP + 服务),部署在某个机器上的交易系统 对外提供的交易查询服务 TransQueryService(服务接口)
降级级别:整个系统服务,不是接口级别。
SOFARPC 服务降级:亚健康节点,导致接口响应异常
维度: IP + 服务维度,如TransQueryService 服务。
采用 自动化监控和降级 。支持 单机 故障剔除能力, SOFARPC 提供几个方面设计:
(1)入口设计 : RPC调用时,增加 信息统计传递入口 。 不破坏开闭原则
(2)信息收集器 : 维护、管理 从入口传来的 统计信息
(3)计算策略 : 根据 度量结果 ,判断是否需要 降级或恢复 服务。触发降级、恢复行为。
(4)度量策略 : 按 一定 维度 对调用信息做 度量 ,判断服务正常或异常。
(5)降级策略 : 指定处理逻辑,如按 打印日志 或 降低权重 。
(6)恢复策略 :如何恢复该服务,如 提高权重 。
单机故障剔除能力(和链路追踪一样)基于 内核设计和总线设计 , 可插拔、零侵入 。
(1)模块 FaultToleranceMole , 通过 SOFARPC 的 SPI 机制完成模块的 自动化加载 ,完成插入。包含:
subscriber 事件订阅器 : 通过订阅事件总线 EventBus 的事件, 零侵入 完成 RPC 调用 统计和信息收集 。
regulator 调节器(核心): 根据收集的 RPC 调用信息,完成 服务调用 或服务 权重调节 ,服务降级、恢复。内置 信息收集器 、 计算、度量、恢复 策略。
(2)FaultToleranceMole 两种调用事件:
同步结果事件: ClientSyncReceiveEvent , 收集和统计 RPC 同步 调用 和 异常 的次数。
异步结果事件: ClientAsyncReceiveEvent ,收集和统计 RPC 异步 调用 和 异常 的次数。
FaultToleranceMole单机故障剔除功能 默认关闭 ,需开启 regulationEffective 全局开关 。
RPC 调用后会 向事件总线 EventBus 发送对应事件 。
FaultToleranceMole 订阅者 收到 对应事件,调用 统计 存储到 信息收集器 中(第一次存触发 Measure 定时任务 )。
Measure 获取信息交给 度量计算(调用计算策略) ,调用降级策略执行 降级、恢复操作 ,如打印日志或降低故障服务权重。
负载均衡器 (默认是 random + weight 负载均衡): 权重低流入少 。
CopyOnWriteArrayList 数据结构保证 线程安全 。
MeasureModel 按 app + service 维度存储,如交易系统中的交易查询服务 TransQueryService. 部署多个机器上, MeasureModel维护 这些所有服务, InvocationStat 维护这些机器上服务 调用关系 。
假设两个服务 ApiGateWay 和 TransCenter分别部署在两台机器上。 TransCenter 向ApiGateWay 提供交易查询 (TransQueryService)服务
InvokeStat 是基于 consumer + provider + service 维度,InvokeStat1 表示 ApiGateway1 调用了 TransCenter-1 的 TransQueryService 服务。 TransCenter 的MeasureModel 数据模型结构如下:
InvokeStat用原子类保证并发安全 。订阅器收到结果,从 工厂中获取InvokeStat (InvokeStat存在直接返回,没有创建保持到缓存)。调用 invoke 和 catchException 方法统计 调用次数和异常次数 。
窗口到 期时 ,从 MeasueModel 各个 InvokeStat 创建镜像数据 ,表示当前 串口内调用 情况。 原 InvokeStat 进入 下个窗口 进行 统计 , 为扣除上一个窗口统计信息 因此该窗口数据 包含上个 窗口的统计 数据 。当度量策略将本窗口的镜像数据统计 完成以后 ,会将 InvokeStat 的数据 扣除 掉当前窗口的镜像数据,使 InvokeStat 中数据 为下个窗口调用 数据。
度量策略会计算 模型 MeasureModel 里的 数据度量 ,选 正常、异常节点 。 默认采用服务 水平 IP 资源度量策略 ,某个 IP 异常率 大于平均 判定异常。
度量策略将计算模型设置为 三种状态 : HEALTH(正常)、ABNORMAL(异常)、IGNORE(忽略) 相互转化。
度量策略大致逻辑如下:
(1)统计该服务下所有 IP 平均异常率 averageExceptionRate= 异常总数 / 总调用次数 =(1 + 4) / (5 + 10 + 10) = 0.2
(2) IGNOGRE: 调用次数 小于 该服务 最小窗口 调用次数( leastWindCount ) 。否则降级和恢复度量。 如leastWindCount =6 , invokeStat 1 忽略
(3)异常率和服务平均异常比例 windowExceptionRate 大于 配置的 leastWindowExceptionRateMultiplte (最小时间窗口内异常率和服务平均异常率的降级比值), 为 ABNORMAL , 否则为 HEALTH
(4)windowExceptionRate 是 异常率 和 平均异常比例 ,invokeStat 1 : 4/5 = 0.8, windowExceptionRate : 0.8 / 0.2 = 4。 假设 leastWindowExceptionRateMultiplte =4, invokeStat 1 是 一次服务 ,则需要进行 降级操作 。
根据度量结果,判断降级、恢复服务。
降级策略执行器 , 获取 到当前正在 度量接口和结果 ,对其权重进行 逐步降级 ,初始权重 100 为例
设置降级速率是 2,第一个窗口被降级 100/2=50 。第二次50/2=25, 达到最小权重 ,不再降。每次 Consumer 进行调用操作时能够被 负载均衡击中几率小很多 ,甚至无法击中。
正常权重为100,异常机器权重为1,恢复速率为2,在下个时间窗口中,触发恢复策略,1*2=2,2*2=4,直到达到默认权重100。
两种情况:(1) Consumer 客户端重启后, 收集器数据 因保存内存都会 消失 ,所有权重的计算都会 重新开始 。
(2)异常服务端(Provider)重启后,服务端正常服务,客户端在时间窗口内调用正常, 权重恢复 。
(1)SOFARPC 5.3.0 支持故障剔除功能 ,亚健康长连接降级,客户端请求指向健康节点。恢复后,逐渐将流量分发到该节点。 所有逻辑在客户端执行。
(2)SOFARPC 的内核设计和事件总线设计 ,不破坏开闭性。FaultToleranceMole 包含了两部分:
事件订阅 :订阅同步和异步结果事件,统计手机 RPC 调用信息入口。
调节器 :根据收集信息、内置策略,来 降级和恢复 。包含信息收集器、计算策略、度量策略、降级策略和恢复策略。
https://mp.weixin.qq.com/s/WusXmhMnsvQ1tQh5wiCyDw