1、Sentinel 是什么?

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 具有以下特征:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

2、Sentinel 作用?

  • 容错
  • 流量监控 可以监控到每一个接口的实时的流量qps(每秒接口请求数量)
  • 熔断降级

熔断: 现实中:当电流过大 ,保险丝熔断 保护电器 微服务中:当流量过大,异常数量超过一定阈值,就会触发熔断,调用降级的策略 响应用户的数据 降级 : 兜底数据


容错

1(接上篇nacos)在feign-consumer 中引入 哨兵依赖

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

2.在配置文件开启哨兵容错

#开启哨兵容错
feign.sentinel.enabled=true

3.使用哨兵配置容错策略

3.1 在controller中加入传递兜底数据的方法

/**
     *  容错的方法 返回值 一定要和 处理器返回的方法 一样,否则前端 会报错
     *
     *  兜底数据
     * @return
     */
    public Student fallBackTest4() {
        Student student = new Student();
        student.setName("哨兵容错,兜底数据");
        return student;
    }

3.2 在controller中配置Sentinel的容错策略

@SentinelResource(value = "test4",fallback = "fallBackTest4")
    @RequestMapping("test4")
    public Student test4(){
        return feginService.updateStudent(new Student(1,"李四",12));
    }

4.只启动 feign -consumer,不启动provider 进行测试

云效流水线 docker部署_spring boot

关闭feign容错

云效流水线 docker部署_数据_02

云效流水线 docker部署_数据_03

sentinel容错生效

云效流水线 docker部署_java_04

 

使用哨兵Sentinel 控制台

Sentinel 控制台提供一个轻量级的控制台,它提供机器发现、单机资源实时监控、集群资源汇总,以及规则管理的功能。您只需要对应用进行简单的配置,就可以使用这些功能。

  • 流量监控
  • 熔断降价

安装配置控制

1.下载

sentinel-dashboard-1.8.0 (1).jar

2.在对应的路径下 使用cmd启动

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar

云效流水线 docker部署_spring cloud_05

 

3.访问

http://localhost:8080/#/login   用户名:sentinel 密码:sentinel

云效流水线 docker部署_云效流水线 docker部署_06

 

流量监控

4.将应用接入到 控制台

#配置哨兵地址  将每一次请的信息 提交到 哨兵控制台
spring.cloud.sentinel.transport.dashboard=localhost:8080

5.重启动 feign-consuer ,多访问几次接口,在哨兵控制台就可以看到监控的流量

云效流水线 docker部署_数据_07

 

熔断降级

基于流量的熔断降级

1.配置熔断降级规则

在controller中 注解中加入blockHandle

@SentinelResource(value = "test4",fallback = "fallBackTest4",blockHandler = "blockHandleTest4")
    @RequestMapping("test4")
    public Student test4(){
        return feginService.updateStudent(new Student(1,"李四",12));
    }

    /**
     *  容错的方法 返回值 一定要和 处理器返回的方法 一样,否则前端 会报错
     *
     *  兜底数据
     * @return
     */
    public Student fallBackTest4() {
        Student student = new Student();
        student.setName("哨兵容错,兜底数据");
        return student;
    }
    /**
     *  熔断降级 规则
     *
     *  该规则 中必须有 BlockException e 形式参数,否则该降级策略无法生效
     *  兜底数据
     * @return
     */
    public Student blockHandleTest4(BlockException e){
        e.printStackTrace();
        Student student = new Student();
        student.setName("触发熔断降级");
        return student;
    }@SentinelResource(value = "test4",fallback = "fallBackTest4",blockHandler = "blockHandleTest4")
    @RequestMapping("test4")
    public Student test4(){
        return feginService.updateStudent(new Student(1,"李四",12));
    }

2.在控制台增加流控规则 (一定要注意,应用重启,流控规则失效)

云效流水线 docker部署_spring cloud_08

3.快速的刷新请求 测试

云效流水线 docker部署_spring boot_09

 

降级规则

云效流水线 docker部署_spring cloud_10

 

1 平均响应时间 (DEGRADE_GRADE_RT):当资源的平均响应时间超过阈值(DegradeRule 中的 count,以 ms 为单位)之后,资源进入准降级状态。接下来如果持续进入 5 个请求,它们的 RT 都持续超过这个阈值,那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回(抛出 DegradeException)。在下一个时间窗口到来时, 会接着再放入5个请求, 再重复上面的判断.

2 异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

3 异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。