Sentinel流控的使用

85 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

Sentinel是阿里打造的一款流量控制的工具。

Sentinel 介绍

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel 功能

  1. 流量控制。
  2. 熔断降级。
  3. 系统负载保护功能。

其中流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

本文章主要介绍Sentinel流量控制的使用。

更多详细内容介绍请看 阿里的Sentinel文档

Sentinel流量控制使用

这里以制作docker镜像为例。 官网下载sentinel控制台jar包

  1. 构建sentinel镜像
docker build -it sentinel .
  1. 启动sentinel
docker run -d --name sentinel -p 9670:8080 sentinel镜像id
  1. 在 nacos 配置sentinel限流持久化规则
         [
            {
                "resource": "/system/user/login",
                "limitApp": "default",
                "grade": 1,
                "count": 2,
                "strategy": 0,
                "controlBehavior": 0,
                "clusterMode": false
            }
         ]

image.png

  • resource : 资源名,限流规则作用对象,一般为请求URI
  • limitApp : 控流针对的调用来源,default则不区分调用来源
  • grade : 限流阈值类型;0表示根据并发量来限流,1表示根据QPS来进行限流
  • count : 限流阈值
  • strategy : 调用关系限流策略
  • controlBehavior : 限流控制行为(快速失败 、warm up 、排队等候)
  • clusterMode : 是否为集群模式

项目引入依赖

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

<!-- nacos做sentinel流控等规则的持久化 用-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

以SpringBoot配置文件为例

spring:
  cloud:
    nacos:
      discovery:
            server-addr: 127.0.0.1:8848

    sentinel:
      transport:
        dashboard: 127.0.0.1:9670
        # 客户端监控API的端口
        port: 8877
      # 使用nacos持久化sentinel限流规则
      datasource:
        ds1:
          nacos:
            server-addr: 127.0.0.1:8466
            # dataId是 nacos 配置列表的Data ID:
            dataId: sentinel-service
            groupId: DEFAULT_GROUP
            # nacos中配置内容的数据格式
            data-type: json
            rule-type: flow