简介
说明
本文介绍Spring Cloud Alibaba Nacos的保护阈值的作用。
在 Nacos 的路由策略中有 3 个重要的内容:权重、保护阈值、就近访问。这 3 个内容是彼此独立的。
官网网址
概述
含义
保护阈值与集群中健康实例的占比有关。如果健康实例占比小于或等于此值,会触发保护阈值,Nacos 会将全部实例(健康实例 + 非健康实例)全部返回给调用者。保护阈值未触发时,Nacos 只会把健康实例返回给调用者。
举例
某个服务有 100 个实例,其中 99 个实例都宕机了,只剩下一个健康的实例,这时如果把所有的请求都转发到这一个健康实例上就会造成雪崩效应,导致系统崩溃。
为了防止这种极端情况,就有了“保护阈值”,保护阈值一旦被触发,Nacos 将会把请求转发给所有服务实例,也就是健康实例+非健康实例,这样可能会损失了部分流量,但能保证集群中剩余的健康实例能正常工作。
查询与设置
保护阈值可在服务详情中查询和设置,如下图所示:

可以通过“编辑服务”来设置保护阈值,如下图所示:

实例
创建一个服务测试保护阈值的功能,在创建的服务中添加两个实例,如下图所示:


触发保护阈值
默认情况下服务实例都是健康的,接下来我们将保护阈值设置为 0.8,也就是健康实例的最低要求是 80%,如果健康实例占比小于此值就会触发保护阈值,如下图所示:

当所有节点都健康时,观察服务列表页面,可以看出并未触发保护阈值的功能,如下图所示:

此时我们手动停止一个服务实例,如下图所示:

健康实例的占比就从 100%下降到了 50%,小于了设置的保护阈值 0.8(80%),接下来返回服务列表页面,可以看到保护阈值功能被触发了:

此时,我们再去访问服务就会看到,部分请求会转发到非健康实例,也就是访问会出错,如下图所示:

不触发保护阈值
降低保护阈值,将保护阈值设置为 0.3,也就是健康实例占比最低要求是 30%,否则会触发阈值保护,如下图所示:

因为我们此时健康实例占比是 50%,大于设置的阈值保护 0.3,所以就不会触发阈值保护,这点可以在服务列表中观察到:

当未触发保护阈值时,Nacos 会把所有请求都转发到健康的实例上,所以每次都能正常的访问服务,执行效果如下图所示:

请先
!