文章目录
- 1. 概述
- 2. 案例演示
- 2.1 设置阈值
- 2.2 未触发
- 2.3 触发
1. 概述
Nacos
支持通过配置健康保护阈值(ProtectThreshold
)防止因过多实例故障,导致所有流量全部流入剩余实例,继而造成流量压力将剩余实例被压垮形成的雪崩效应。
健康保护阈值定义为⼀个 0
到 1
之间的浮点数。当域名健康实例数占总服务实例数的比例小于该值时,无论实例是否健康,都会将这个实例返回给客户端。这样做虽然损失了⼀部分流量,但是保证了集群中剩余健康实例能正常工作。
2. 案例演示
2.1 设置阈值
启动 user-demo
、order-demo
,其中order-demo
注册了四个实例:
需要注意的是,这里设置为了永久实例,因为临时实例状态不健康后,会在服务列表中被删除,无法演示出保护效果:
在服务详情中,点击编辑服务,可以设置阈值,0.5
表示如果健康实例占比总数低于一半时,会触发健康保护阈值:
2.2 未触发
关闭 8080
端口的服务,此时健康状态为 false
:
此时健康实例数为 3
,占比为 3/4
即0.75
,大于阈值0.5
,多次调用 order-demo
时,都会返回健康实例,没有发现异常:
2.3 触发
关闭三个服务时,此时健康实例数为 1
,占比为 1/4
即0.25
,低于阈值0.5
,此时会触发健康保护机制,可以在服务列表中看到健康实例数、是否触发保护阈值:
当触发了健康保护后,Nacos
会将不健康的实例也返回给客户端,而客户端并不会关心实例是否健康,当调用到不健康实例时,会抛出异常,虽然会造成一部分用户体验不佳,但是可以防止雪崩效应。