Sentinel是一款开源的分布式系统流量防卫兵,通过流控、降级、热点规则、授权规则等功能,提供了对系统稳定性和性能的强大保障。下面我们将介绍如何在项目中集成Sentinel,并使用其强大的功能来保障系统的稳定性和可用性。
首先,在项目的pom.xml
文件中添加Sentinel的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
在application.yml
(或application.properties
)中添加Sentinel的配置信息,指定控制台地址:
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080 # Sentinel控制台地址
启动Sentinel控制台,访问http://localhost:8080
,即可进入控制台进行规则的配置和监控。
在控制台设置QPS和线程数的流控规则,当请求超过限定的QPS或服务器线程数超过指定值时,自动拒绝请求。
关联流控用于处理资源竞争情况,当核心资源(资源1)达到阈值后,限流资源2。链路流控可在业务层指定某个链路进行控流。
降级规则在执行业务之后进行统计,根据不同情况触发熔断。
指定多长时间的请求判定为慢请求,当慢请求比例到达设置的值时,自动熔断,熔断的时间由自行设置。
当请求的错误比例或异常数量达到设置的阈值时,触发熔断。
通过利用公司的热点key,发现哪些参数的查询/处理属于热点数据,需要对热点数据进行限流。在Sentinel控制台中进行相关规则的配置,确保热点数据的处理不会影响系统整体性能。
授权规则涉及接口的权限管理,需要在系统中添加接口实现类,解析/获取请求中的权限信息。在Sentinel控制台中设置白名单和黑名单,对访问进行管控。
为了更好地处理Sentinel的异常情况,可以创建一个自定义异常处理类,实现BlockExceptionHandler
接口。通过该类,可以对不同类型的异常进行定制化的处理。
@Component
public class ExceptionHandlerPage implements BlockExceptionHandler {
// 实现异常处理逻辑
}
通过@SentinelResource
注解,可以在针对某一个地址做特殊响应的时候,进行定制化返回。这提供了更灵活的方式来处理特定场景下的流控和降级。
@SentinelResource(value = "example", blockHandler = "handleBlock", fallback = "handleFallback")
public String example() {
// Your business logic here
}
在使用Feign进行远程调用时,默认情况下是没有集成Sentinel的支持的。为了在远程服务不可用的情况下,保证请求不报错,可以进行如下配置。
在Feign的配置文件中,开启Sentinel的支持:
feign:
sentinel:
enabled: true
这样,当远程服务不可用时,Feign会走本地的方法,返回预设的兜底数据,确保请求不会因远程服务不可用而报错。