SpringCloudAlibaba—Sentinel

SpringCloudAlibaba—Sentinel

安装Sentinel控制台

  • Sentinel 提供一个轻量级的控制台, 它提供机器发现、单机资源实时监控以及规则管理等功能。

  • 官网下载[https://github.com/alibaba/Sentinel/releases]

  • img
  • Sentinel控制台下载完成后,在本地启动Sentinel控制台,如下所示。

    java -Dserver.port=8888 -Dcsp.sentinel.dashboard.server=localhost:8888 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.4.jar
    
  • linux安装

    nohup java -Dserver.port=8888 -Dcsp.sentinel.dashboard.server=localhost:8888 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.4.jar >> /dev/null &
    
  • 启动后在浏览器中输入 http://localhost:8888 访问Sentinel控制台,如下所示。

    image.png

  • 账号密码默认都是sentinel

  • 登录之后如下

image.png
  • 至此,Sentinel控制台下载并启动成功。

Sentinel集成Nacos实现动态流控规则

Sentinel的理念是只需要开发者关注资源的定义,它默认会对资源进行流控。当然,我们还是需要对定义的资源设置流控规则,主要有两种方式:

  • 通过FlowRuleManager.loadRules()手动加载流控规则。
  • 在Sentinel Dashboard上针对资源动态创建流控规则。

针对第一种方式,如果接入Sentinel Dashboard,那么同样支持动态修改流控规则,但是基于Sentinel Dashboard所配置的流控规则,都是保存在内存中的,一旦应用重启,这些规则都会被清除。为了解决这个问题,Sentinel提供了动态数据源支持。

目前,Sentinel支持Consul、Zookeeper、Redis、Nacos、Apollo、etcd等数据源的扩展,接下来通过一个案例展示Spring Cloud Sentinel集成Nacos实现动态流控规则,步骤如下:

  1. 添加Nacos数据源的依赖包

    com.alibaba.csp
    sentinel-datasource-nacos
    1.7.0

  1. 在application.yml文件中添加数据源配置
spring:
  application:
    name: sentinel-spring-cloud-demo
  cloud:
    sentinel:
      transport:
        dashboard: 192.168.56.1:7777
      datasource:
        - nacos:
            server-addr: 192.168.56.1:8848
            data-id: ${spring.application.name}-sentinel
            group-id: DEFAULT_GROUP
            data-type: json
            rule-type: flow

部分配置说明如下:

  • datasource: 目前支持redis、apollo、zk、file、nacos,选什么类型的数据源就配置相应的key即可。
  • data-id:可以设置成${spring.application.name},方便区分不同应用的配置。
  • rule-type:表示数据源中规则属于哪种类型,如flow、degrade、param-flow、gw-flow等。
  • data-type:指配置项的内容格式,Spring Cloud Alibaba Sentinel提供了JSON和XML两种格式,如需要自定义,则可以将值配置为custom,并配置converter-class指向converter类。
  1. 登陆Nacos控制台,创建流控配置规则:
image.png
  1. 登陆Sentinel Dashboard,找到执行项目名称菜单下的“流控规则”,就可以看到在Nacos上所配置的流控规则已经被加载了。
image.png

流控规则

[
  {
    // 资源名
    "resource": "/test",
    // 针对来源,若为 default 则不区分调用来源
    "limitApp": "default",
    // 限流阈值类型(1:QPS;0:并发线程数)
    "grade": 1,
    // 阈值
    "count": 1,
    // 是否是集群模式
    "clusterMode": false,
    // 流控效果(0:快速失败;1:Warm Up(预热模式);2:排队等待)
    "controlBehavior": 0,
    // 流控模式(0:直接;1:关联;2:链路)
    "strategy": 0,
    // 预热时间(秒,预热模式需要此参数)
    "warmUpPeriodSec": 10,
    // 超时时间(排队等待模式需要此参数)
    "maxQueueingTimeMs": 500,
    // 关联资源、入口资源(关联、链路模式)
    "refResource": "rrr"
  }
]

降级规则

[
  {
   // 资源名
    "resource": "/test1",
    "limitApp": "default",
    // 熔断策略(0:慢调用比例,1:异常比率,2:异常计数)
    "grade": 0,
    // 最大RT、比例阈值、异常数
    "count": 200,
    // 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)
    "slowRatioThreshold": 0.2,
    // 最小请求数
    "minRequestAmount": 5,
    // 当单位统计时长(类中默认1000)
    "statIntervalMs": 1000,
    // 熔断时长
    "timeWindow": 10
  }
]

热点规则

[
  {
   // 资源名
    "resource": "/test1",
    // 限流模式(QPS 模式,不可更改)
    "grade": 1,
    // 参数索引
    "paramIdx": 0,
    // 单机阈值
    "count": 13,
    // 统计窗口时长
    "durationInSec": 6,
    // 是否集群 默认false
    "clusterMode": 默认false,
    // 
    "burstCount": 0,
    // 集群模式配置
    "clusterConfig": {
      // 
      "fallbackToLocalWhenFail": true,
      // 
      "flowId": 2,
      // 
      "sampleCount": 10,
      // 
      "thresholdType": 0,
      // 
      "windowIntervalMs": 1000
    },
    // 流控效果(支持快速失败和匀速排队模式)
    "controlBehavior": 0,
    // 
    "limitApp": "default",
    // 
    "maxQueueingTimeMs": 0,
    // 高级选项
    "paramFlowItemList": [
      {
       // 参数类型
        "classType": "int",
       // 限流阈值
        "count": 222,
       // 参数值
        "object": "2"
      }
    ]
  }
]

系统规则

负值表示没有阈值检查。不需要删除参数

[
  {
   // RT
    "avgRt": 1,
    // CPU 使用率
    "highestCpuUsage": -1,
    // LOAD
    "highestSystemLoad": -1,
    // 线程数
    "maxThread": -1,
    // 入口 QPS
    "qps": -1
  }
]

授权规则

[
  {
    // 资源名
    "resource": "sentinel_spring_web_context",
   // 流控应用
    "limitApp": "/test",
    // 授权类型(0代表白名单;1代表黑名单。)
    "strategy": 0
  }
]

你可能感兴趣的:(SpringCloudAlibaba—Sentinel)