服务熔断与降级概述
限流小能手Sentinel,不仅提供了流量控制功能,还支持熔断降级等多种限流方式。在本文中,我们将探讨如何在Nacos中配置降级规则,实现对微服务的熔断降级。服务熔断是一种保护措施,旨在防止因服务过载而导致的系统故障。 当服务器压力过大时,服务降级可以释放有限资源,确保核心任务得以执行。在微服务架构中,服务之间的依赖关系复杂,某个服务的调用失败可能引发连锁反应。通过熔断和降级策略,我们可以确保一个服务的调用失败不会导致其他相关服务也失败。


02Sentinel熔断规则详细解释
◆ DegradeRule关键字段
Sentinel的熔断降级规则DegradeRule包含以下关键字段:
-
resource:规则的作用对象,即被限流的资源名。
-
grade:熔断策略,支持慢调用比例、异常比例和异常数策略。
-
slowRatioThreshold:在慢调用比例模式下,超过该值的调用被计为慢调用;在异常比例或异常数模式下,该字段表示对应的阈值。
-
timeWindow:熔断时长,以秒为单位。
-
minRequestAmount:触发熔断的最小请求数。

◆ 慢调用比例模式
慢调用比例模式是一种重要的策略类型。它通过设定慢调用比例阈值触发熔断,当慢调用比例超过阈值时,熔断器将阻断请求并尝试恢复。 具体来说,当单位统计时长内的慢调用比例超过设定的阈值时,熔断器会在接下来的熔断时长内自动阻断请求。一旦熔断器进入探测恢复状态(HALF-OPEN状态),它会尝试探测下一个请求的响应时间。如果响应时间小于设置的慢调用RT,则熔断器会解除阻断;否则,它将再次进入阻断状态。
◆ 异常比例与异常数模式
除了慢调用比例模式外,还有异常比例和异常数模式根据异常请求数或比例来触发熔断,这两种模式在机制上与慢调用比例模式相似。 异常比例模式根据单位统计时长内的异常请求比例来触发熔断,而异常数模式则是当异常请求数超过阈值时进行熔断。这两种模式的触发条件和慢调用比例模式类似,都是通过设置阈值来判定是否需要熔断,并且在熔断后都有一个探测恢复的过程。

03在Nacos中的配置步骤
◆ 新建dataId配置降级规则
接下来,我们将在Nacos中配置一个类型为异常比例的熔断策略。在Nacos中创建名为sakila-degraderule的新dataId,以配置sakila微服务的降级规则,规则以json数组形式存储。 首先,我们需要新建一个dataId,命名为sakila-degraderule,用于存放sakila微服务的所有降级规则。这些规则将以json格式的数组形式进行配置。

◆ sakila微服务配置
我们还需要在sakila微服务的配置文件中追加相应的数据源信息,以确保上述熔断降级规则能够生效。添加nacos服务器地址和sentinel配置至sakila微服务配置文件,确保熔断规则生效。 这些信息包括spring cloud sentinel的相关配置,以及nacos的数据持久化设置。具体来说,我们需要指定nacos服务器的地址,以及一些用于标识和区分配置的参数,如dataId、groupId和namespace等。同时,我们还需要确保规则的类型被正确设置为flow,以符合我们的熔断降级需求。
◆ Sentinel控制台规则声明
在sakila微服务的配置中,追加了一些关键数据源信息后,我们就可以在Sentinel控制台中进行规则的声明。在Sentinel控制台中设置限流规则为熔断降级,并确认规则在降级配置中体现。 点击sentinel控制台中的"编辑"按钮,可以查看熔断降级规则的详细配置信息。这里将rowCount设置为1的目的是使资源actorRS在调用时能够抛出异常,从而触发熔断机制。我们发现,在初始调用时,由于请求数未达到配置规则中的最小请求数(即3个),这将触发fallback方法。随着请求数的增加且异常持续抛出,熔断机制将启动,调用blockHandler中的方法以产生限流效果。