springcloud -- sentinel 一(下载、安装、流控规则)

写这篇主要是看网上资料不怎么全面,防止自己遗忘。。。。

1、官网 (下载地址)

https://github.com/alibaba/Sentinel/releases

2、能干嘛

 

 

解决服务中各种问题:

  服务雪崩

  服务降级  

  服务熔断

  服务限流

3、安装启动sentinel

进入下载完成的sentinel 路径

 登录的账号密码都是  sentinel

 4、springcloud 中 yml配置sentinel

server:
  port: 8301
spring:
  application:
    name: mmren-edu-micro-sentinel-1
  cloud:
    nacos:
      server-addr: alex.com:8848
    sentinel:
      transport:
        # 默认为8719,如果发现该端口被占用,每次尝试默认端口+1,直到找到未被占用的端口为止
        port: 8719
        # sentinel监控地址必须配置
        dashboard: localhost:8888

  

5、测试sentinel ,测试类

@RestController
@Slf4j
public class RateLimitController {

    // 测试QPS
    // 线程数的测试
    @GetMapping("testA")
    public String testA() {
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "测试TestA";
    }

    @GetMapping("testB")
    public String testB() {
        log.info("1秒处理一个请求,排队处理......");
        //log.info("TestB运行中.....");
        return "测试TestB";
    }

    @GetMapping("testD")
    public String testD() {
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //log.info("TestB运行中.....");
        return "测TestD中RT配置";
    }

    @GetMapping("testC")
    public String testD1() {
        int i = 10 / 0;
        //log.info("TestB运行中.....");
        return "测TestC中异常比例配置";
    }

    @GetMapping("testE")
    public String testE() {
        int i = 10 / 0;
        log.info("测TestE中异常输配置");
        return "测TestE中异常输配置";
    }

    @GetMapping("testHotkey")
    @SentinelResource(value = "testHotkey", /*defaultFallback = "hotkeyHandler"*/blockHandler = "handler")
    public String testHotkey(
            @RequestParam(value = "p1",required = false) String p1,
            @RequestParam(value = "p2",required = false) String p2) {
        return "测试热点key限流";
    }

    public String handler(String p1, String p2, BlockException e) {
        return "fdsfdsfdsf " + e.getMessage();
    }

    public String hotkeyHandler() {
        return "触发降级方法!";
    }
}

 顺便说一下sentinel 是懒加载,启动完成后需要再访问才会在界面上显示

 

sentinel 怎么玩之 配置 

流控模式--直接(默认)

限流配置:

 

 访问超过每秒访问一次,默认返回结果:

 

 线程数测试: 每秒访问的线程只能有一个

 

流控模式--关联

 

jemter模拟并发密集访问testB

1、添加线程组

 

2、添加http请求

 

 

启动后访问testA 会发现A这边被限制了,但是testB是没有被限制的

 

 被关联的资源是不会被限制的

 

流控效果--预热

阈值类型只有QPS才有流控效果

公式:阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值

 

 一致访问testB,前五秒出现的限制,5秒后一直能正常访问

 

 

 应用场景:

如:秒杀系统在开启瞬间,会有很多流量上来,很可能把系统打死,预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值。

 

流控效果--排队等待 

 

 

 

 QPS阈值设置为每秒1个,不管你访问评率多少,每秒只会处理一个,其他在后面排队处理

 

posted @ 2021-06-22 16:38  AlexZS  Views(526)  Comments(0Edit  收藏  举报