一 Sentinel介绍

    SpringCloud Sentinel 是阿里巴巴开源的一款面向云原生微服务的流量治理组件,致力于保障服务的稳定性。它以“资源”为核心,从流量控制、熔断降级、系统负载保护等多个维度来防止服务雪崩。与 Hystrix 相比,Sentinel 设计更轻量,不依赖线程池隔离,支持更为丰富的流控模式(如冷启动预热、排队等待),并提供开箱即用的实时监控控制台。它能无缝集成 Spring Cloud、Dubbo 及各类 API 网关,是目前微服务架构中主流的稳定性解决方案。

主要功能和使用场景如下:
主要功能
    为了更好地理解上述表格,需要了解 Sentinel 的三个核心概念:

  • 资源 (Resource):Sentinel 保护的目标。可以是 Java 代码块、方法、RPC 接口、API 路由等。
  • 规则 (Rules):定义如何保护资源的策略(如:QPS > 100 就报错)。规则可以动态推送到 Sentinel 控制台。
  • 控制台 (Dashboard):可视化的 Web 界面,用于实时监控服务流量、查看调用链路、动态配置规则。

二 调用组件SpringCloud Sentinel示例

1. 引入Sentinel依赖

    在父模块pom引入依赖

      <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

2. 编写Sentinel配置项

    编写Sentinel配置项。

  spring:
  cloud:
    openfeign:
      #使用 Apache HttpClient 5
      httpclient:
        hc5:
          enable: true
      client:
        config:
          #全局
          default:
            logger-level: full
            connect-timeout: 3000
            read-timeout: 3000
    sentinel:
      transport:
        dashboard: localhost:8080
      eager: true   

3. 启动sentinel-dashboard控制台

    Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。下载控制台jar包,并启动控制台。
控制台
控制台界面
后台

4. 对接口资源设置流控规则

流控
    1) 对接口资源设置流控规则中QPS阈值为1。
规则设置
高频访问该资源接口,当QPS超过1时,会提示错误。可以根据自己需求重写流控异常处理器BlockExceptionHandler,返回想要的信息。
响应
    2) 对service方法资源设置流控规则中QPS阈值为1。
方法流控

//  示例
@Service
public class OrderServiceImpl implements OrderService {

    @SentinelResource(value = "createOrder",blockHandler = "createOrderFallback")
    @Override
    public OrderEntity createOrder() {
        OrderEntity orderEntity = new OrderEntity();
        orderEntity.setId(10l);
        orderEntity.setTotalNum(1);
        orderEntity.setUserName("Admin");
        return  orderEntity;

    }
}

    在资源方法上,设置blockHandler兜底方法,如果超过限制条件,可返回预设置的兜底数据。
在这里插入图片描述

5. 流控模式

    流控模式是根据什么条件判断是否限流。 Sentinel 提供三种流控模式:

  • 直接:默认模式。直接统计当前资源的 QPS 或线程数,当达到阈值时,直接对当前资源进行限流。逻辑:自己扛不住了,就限自己。
  • 关联:统计与当前资源有关联的另一个资源,当关联资源流量超限时,限制当前资源。逻辑:为了保住重要的(关联资源),牺牲次要的(当前资源)。
  • 链路:只记录指定入口(Entry)进来的流量。如果从某个特定入口调用当前资源的流量超限,则限流;其他入口调用不受影响。
    流控方式

6. 流控效果

    流控效果,定义当 QPS 超过阈值时,系统如何处理多余的请求(仅针对 QPS 限流生效)。

  • 快速失败:默认效果。当流量达到阈值,直接抛出 FlowException 异常,拒绝请求。
  • Warm Up:应对服务冷启动的方案,系统在刚启动的一段时间内(预热时长),阈值从一个较小值(max/3)缓慢增加到设置的最大阈值。
  • 排队等待: 允许所有的请求按照先后次序排队执行,保证请求之间的间隔不小于指定的时长。严格控制请求通过的间隔时间,强制请求以匀速通过。超过排队等待时间的请求才会被拒绝。

7. 熔断规则

    当调用链路中的某个资源出现不稳定状态(如响应时间变长、异常比例升高)时,Sentinel 会对该资源的调用进行熔断,即在一段时间内(熔断时长)直接拒绝访问并快速返回降级数据,避免源源不断的请求导致资源耗尽(如线程池满),从而保护主业务链路。
Sentinel 的熔断机制基于熔断器模式,包含三种状态:Closed(关闭/正常)、Open(开启/熔断)、Half-Open(半开启/恢复检测)。

Sentinel 提供三种主要的熔断策略(规则)

  • 慢调用比例:针对响应时间。在统计时长内,如果请求的响应时间(RT)超过了设定的阈值,该请求被记为“慢调用”。当慢调用比例 > 设定阈值,触发熔断。
  • 异常比例:针对错误率。在统计时长内,如果(异常请求数 / 总请求数)的比例 > 设定阈值,触发熔断。
  • 异常数:针对错误计数。在统计时长内,如果请求的异常总数 > 设定阈值,触发熔断。
    熔断规则

8. 热点规则

    普通的流控是限制整个 API 的总流量(例如:/getProduct 接口每秒只能访问 100 次),而热点规则是统计传入参数中的热点数据,并对包含该特定参数值的请求进行限流(例如:/getProduct?id=1 这个具体商品的访问量过大,只限制 id=1 的请求,而不影响 id=2 的请求)。热点规则的使用通常需要配合注解 @SentinelResource 使用。
热点限流
    Sentinel 的热点规则如下:

  • 热点参数基础限流:针对参数索引。指定监控方法中的第几个参数(索引 0, 1…)。当该参数的任意值(如 id=A, id=B)的 QPS 超过阈值时,对该特定值的请求进行限流。
  • 参数例外项: 针对特定值定制。在基础限流的前提下,对某些特定的参数值设置“特殊待遇”(更高或更低的阈值)。
    热点规则

更多推荐