zoukankan      html  css  js  c++  java
  • 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个,不管你访问评率多少,每秒只会处理一个,其他在后面排队处理

  • 相关阅读:
    结对作业(测试版)
    回答自己的提问
    阅读一个程序员的生命周期有感
    阅读13到17章提出问题
    读8 9 10章提出问题
    5.2 5.3测试与封装
    5.1 四则运算单元测试j
    阅读5.5章6章7章提出疑问
    做汉堡
    阅读第1到第5章过程的疑问
  • 原文地址:https://www.cnblogs.com/alomsc/p/14919197.html
Copyright © 2011-2022 走看看