SpringCloud Alibaba Sentinel 概念、安装和使用介绍

Sentinel 能够做什么?

Sentinel 可以认为是 Alibaba 版的 Hystrix。

而 Hystrix 存在如下的问题:

  • 需要程序员自己手工搭建监控平台
  • 没有一套 web 界面可以给我们进行更加细粒度化的配置流控、速率控制、服务熔断、服务降级…

在这里插入图片描述

Sentinel 是什么?

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

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

Sentinel 安装和登录

Sentinel分为两个部分:

  • 核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo /
    Spring Cloud等框架也有较好的支持。
  • 控制台(Dashboard) 基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用
    容器。

Sentinel 安装步骤:

  1. GitHub 下载地址
    在这里插入图片描述
    下载 sentinel-dashboard-1.8.0.jar 到本地
  2. 使用 java -jar 即可运行,前提是:java 8环境已配置、8080端口不能被占用。
  3. 访问如下 Sentinel 控制台:localhost:8080,默认的账号和密码都是 localhost:8080
    在这里插入图片描述

Sentinel 监控服务的基本使用

  1. 新建工程 cloudalibaba-sentinel-service8401
  2. pom 文件
    <dependencies>

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

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
      
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
  1. yml 文件
server:
  port: 8401

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 将服务注册到 Nacos
    sentinel:
      transport:
        dashboard: localhost:8080 # 让服务被 Nacos 监控
        port: 8719  #默认8719,假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口

management:
  endpoints:
    web:
      exposure:
        include: '*' # 启动监控版
  1. 主启动类注解:
    @EnableDiscoveryClient
    @SpringBootApplication
  2. 编写业务类做测试
@RestController
public class FlowLimitController
{
    @GetMapping("/testA")
    public String testA() {
        return "------testA";
    }

    @GetMapping("/testB")
    public String testB() {

        return "------testB";
    }
  1. 启动 Sentinel:java -jar sentinel-dashboard-1.7.0;启动微服务8401
  2. Sentinel 采用的是懒加载方式,所以我们要先访问一次 8401 微服务,才能在 Sentinel 控制台上看见 8401 的信息。访问 8401:http://localhost:8401/testA
  3. 查看 Sentinel 控制台如下,可以看出 Sentinel 已经在监控 8401 了
    在这里插入图片描述

Sentinel 控制台的各功能详解

1. 流控规则详解(流控指流量控制,而非流程控制)

在这里插入图片描述
在这里插入图片描述
三种流控模式:

  • 直接:设置自己的阈值,请求达到阈值就限流自己。
    在这里插入图片描述

  • 关联:当关联的资源达到阈值时,就限流自己。比如下单接口关联生成订单接口,如果生成订单接口达到阈值了,那么下单接口也会限流自己。
    在这里插入图片描述

  • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就可以限流)

2. 流控效果

  • 直接失败:抛出异常
  • Warmup(预热):启动的阈值为阈值除以 coldFactor(默认值为3),经过预热时长后才会达到阈值,也叫做限流-冷启动。在这里插入图片描述
  • 排队等待:匀速排队,阈值必须设置为QPS

3. 降级规则

在这里插入图片描述

  • RT:
    在这里插入图片描述
    在这里插入图片描述
  • 异常比例:
    在这里插入图片描述
    在这里插入图片描述
  • 异常数:异常数是按照分钟统计的
    在这里插入图片描述
    在这里插入图片描述

4. 自定义兜底的降级方法(默认是页面输出 Blocked by Sentinel)

和 Hystrix 指定兜底方法的注解 @HystrixCommand 类似,Sentinel 指定兜底方法的注解为 @SentinelResource。
实例代码:

// 被降级方法
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
                         @RequestParam(value = "p2",required = false) String p2) {
    //int age = 10/0;
    return "------testHotKey";
}
 
//兜底方法
public String deal_testHotKey (String p1, String p2, BlockException exception){
    return "------deal_testHotKey,o(╥﹏╥)o";  
}

5. 热点 key(参数) 限流

  1. 是什么?
    在这里插入图片描述
    Sentinel 热点 key 限流的官网介绍

以上一知识点(自定义兜底降级方法)所贴的函数为例,该函数有 p1、p2 两个参数。

我们在 Sentinel 控制台做如下配置:
在这里插入图片描述
结果为:方法 testHostKey 里面第一个参数只要QPS超过每秒1次,马上降级处理,而第二个参数无限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值