容灾恢复

集群中通常一个服务有多个服务提供者,其中部分服务提供者可能由于网络、配置、长时间 fullgc、线程池满、硬件故障等导致长连接还存活但是程序已经无法正常响应。单机故障剔除功能会将这部分异常的服务提供者进行降级,使客户端的请求更多地指向健康节点。当异常节点的表现正常后,单机故障剔除功能会对该节点进行恢复。解决了服务故障持续影响业务的问题,避免了雪崩效应,提高系统可用率。

功能原理

单机故障剔除会统计一个时间窗口内的调用次数和异常次数,并计算每个服务对应 IP 的异常率和该服务的平均异常率。当 IP 的异常率大于服务平均异常率,且达到一定比例时,单机故障剔除会对该服务 + IP 的维度进行权重降级。如果该服务 + IP 维度的权重并没有降为 0,那么当该服务 + IP 维度的调用情况正常时,则会对其进行权重恢复。整个计算和调控过程异步进行,不会阻塞调用。

使用方式

配置示例如下:

FaultToleranceConfig faultToleranceConfig =new FaultToleranceConfig();
faultToleranceConfig.setRegulationEffective(true);
faultToleranceConfig.setDegradeEffective(true);
faultToleranceConfig.setTimeWindow(20);
faultToleranceConfig.setWeightDegradeRate(0.5);

FaultToleranceConfigManager.putAppConfig("appName", faultToleranceConfig);

以上配置完成后,目标应用会在每 20s 的时间窗口进行一次异常情况计算,如果某个服务 + IP 的调用维度被判定为故障节点,则会将该服务 + IP 的权重降级为 0.5。更多信息,请参见 自动故障剔除