Sentinel笔记

基本操作

1.pom及yml配置

父级工程

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

consumer

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
    </dependencies>
server:
  port: 8090
spring:
  application:
    name: nacos-consumer
  cloud:
    sentinel:
      transport:
        port: 8099 #跟sentinel控制台交流的端口,随意指定一个未使用的端口即可
        dashboard: localhost:8180 # 指定sentinel控制台地址
      eager: true #默认为false (当前服务启动时,是否与sentinel进行建立连接)
      web-context-unify: false
      datasource:
        ds:
          nacos:
            server-addr: localhost:8848
            group-id: DEFAULT_GROUP
            rule-type: flow
            data-id: nacos-consumer
            data-type: json
    nacos:
      discovery:
        server-addr: localhost:8848 #从哪里去查找服务

provider

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
server:
  port: 8081
spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      server-addr: localhost:8848

2.Sentinel 1.8.0启动命令

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

3.Sentinel登录

账号: sentinel
密码: sentinel

4.主要功能

1. 限流

设置阈值类型QPS
设置单机阈值数

选择监控模式

  • 直接→ 直接对服务进行流控
  • 关联→ 保证重要服务的正常调用, QPS激增时对次要服务控流降级
    (资源名是被限流的服务, 关联资源是较重要的服务)
  • 链路→ 对服务调用的资源限流, 在服务中针对方法添加@SentinelResource注解指定资源名,
    (由于Sentinel版本问题, 可能服务会出现在Sentinel资源列表下, 需要配置yml中的web-context-unify, 或者将资源名写为Sentinel服务)

选择流控效果

  • 直接失败→ 失败返回异常
  • Warn→ 在设置的时间内QPS逐渐达到峰值, 减轻服务器压力, 如设置阈值100, 时间10s, 会在10秒后达到最大流量
  • 排队等待→ 匀速排队

2. 降级

对不稳定的资源进行熔断
设置熔断策略

  • 慢调用比例
  • 异常比例
  • 异常数

设置最大RT, 即调用阻塞等待的最大时长
设置比例阈值, 即最小请求数中调用超时比例
设置熔断时间
设置最小请求数, 规定请求达到的数量

返回Degrade异常

3. 热点

对某个调用频率高的资源进行限制, 比如经常用于增删改查的参数id
设置参数索引, @SentinelResource注解的第一个参数下标为0
设置单机阈值

设置窗口时长, 时间段内调用达到阈值即被限流
可选择配置高级设置, 针对具体参数值设置阈值, 灵活度高

返回Flow异常

4. 授权

设置要授权的服务
设置应用名, 多个用逗号隔开
创建RequestOriginParser接口的实现类, 重写ParserOrigin方法, 通过HttpServerlet类get参数/请求头等信息, 返回origin, 调用资源的应用名会传入origin进行判断

参数显式请求方式: http://ip:port/xxx?param=xx&origin=appName

设置白名单/黑名单
白名单意为只有输入的应用名可以调用资源
黑名单意为除了输入的应用名之外都可以调用资源

返回Authority异常

5.系统规则

5.持久化

由于服务先前一直运行在内存中, 每次重启关闭都要重新访问显示列表, 可以使用持久化操作将配置保存

配置pom依赖
打开nacos添加json配置, 如

[
  {
    "resource": "/consumer/doRestEcho",
    "controlBehavior": 0,
    "count": 1.0,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  }
]
  • resource:资源名,即限流规则的作用对象
  • limitApp:流控针对的调用来源,若为 default 则不区分调用来源
  • grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
  • count:限流阈值
  • strategy:调用关系限流策略
  • controlBehavior:流量控制效果(快速失败、Warm Up、匀速排队)
  • clusterMode:是否为集群模式

此时重启服务, Sentinel中会保持这些配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值