zoukankan      html  css  js  c++  java
  • Sentinel使用

    Sentinel控制台的功能主要包括:流量控制、降级控制、热点配置、系统规则和授权规则等

    # 安装sentinel的控制台

    ## 下载地址
    Sentinel控制台下载地址:

      https://github.com/alibaba/Sentinel/releases
      版本自己选择

    # 启动控制台
    到sentinel所在的目录运行下面的命令:
      java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-版本号.jar
    启动之后访问localhost:8080;登录即可用户名和密码默认是sentinel

     

    登录之后看到左侧的菜单只有默认的一个;因为现在sentinel还没有发现其他机器

    # 客户端搭建--sc

    基于spring-cloud的项目来搭建一个sentinel客户端

    1、加入spring-cloud的sentinel依赖

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


    2、建立一个controller

        package com.shadow.web;
        
        import org.springframework.web.bind.annotation.GetMapping;
        import org.springframework.web.bind.annotation.RestController;
        
        @RestController
        public class UserController {
        
            @GetMapping("login")
            public String login() throws InterruptedException {
                System.out.println("login----");
                return "success";
            }
        
            @GetMapping("log")
            public String log(){
                System.out.println("log----");
                return "success";
            }
        
        }
    View Code

    3、yml配置

    ```
    server:
      port: 9000
    spring:
      application:
        name: register-server
        sentinel:
          transport:
            port: 8719  #如果加了客户端他就会开启一个 http server  为了dashboard 能够发过来
            dashboard: localhost:8080
    ```
    View Code

    spring.cloud.sentinel.transport.dashboard——sentinel控制台的ip和端口地址

    spring.cloud.sentinel.transport.port——sentinel客户端和控制台通信的端口

    然后启动项目;继而访问localhost:8080/login;跟着刷新sentinel的控制台可以看到sentinel已经发现了我们的项目server-register

    并且可以在簇点链路中看到刚刚那个请求

    接下来就对这个请求进行流控、降级、授权、热点等配置等等配置了;先来介绍如何添加流控吧;点击+流控的按钮

    怎么配置呢?首先了解这概念吧

    # sentinel 术语
    1、资源:标识资源的唯一名称,springboot项目默认为controller当中的请求路径,也可以在客户端中使用SentinelResource配置;比如你有个service当中的xx方法;你想对这个xx方法进行流控那么这个xx方法必须是一个资源;

    2、针对来源:Sentinel可以针对服务调用者进行限流,填写微服务名称即spring.application.name,默认为default,不区分来源

    3、阈值类型、单机阈值

    QPS——每秒钟的请求数量,当调用该资源的QPS达到阈值的时候,进行限流;
    线程数——当调用该资源的线程数达到阈值的时候,进行限流

    4、是否集群:默认不集群;

    5、流控模式:

    直接:当资源调用达到限流条件的时,直接限流;
    关联:当关联的资源请求达到阈值的时候,限流自己;
    链路:下节课说

    6、流控效果:

    快速失败:直接失败;
    Warm Up:根据冷加载因子默认值为3的值,从阈值/3,经过预热时长,才达到设置的QPS阈值;
    排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为QPS,否则无效


    # QPS直接失败

    上面设置的效果是,1秒钟内请求/login资源的次数达到1次以上的时候,进行限流

    ## 效果演示
    首先一秒请求一次login没有问题;然后发挥你手速;一秒超过一次之后页面返回Blocked by Sentinel (flow limiting);如果手速不够多练练吧——总归有办法的

    ....

    # 线程数直接失败

    把login方法让其睡眠一秒;因为无论你单身多少年;你的手速不可能超过计算机;所以在刷新的情况下永远只有一个线程;如果让他睡眠1秒;这样就能模拟出来服务器这边开多个线程来处理的场景了;

    ```
      @GetMapping("login")
        public String login() throws InterruptedException {
            System.out.println("login----");
            Thread.sleep(1000);
            return "success";
        }
    ```
    View Code

    改完之后重启你的项目,然后先访问一次login;因为你重启之后sentinel控制台这边就检测不到了;需要重新访问一次;跟着添加流控规则

    ## 效果演示
    首先慢慢刷新login请求;——等睡眠时间过;服务器永远只有一个线程,发觉没问题;但是你疯狂在地址栏里面点击回车(注意不要去刷新,因为刷新是会等到服务器返回之后才能点击;所以效果演示不出来,最好是点击回车在地址栏)就会失败

    ...

    # 流控模式关联

    首先把login方法当中的睡眠删除;然后重启项目,访问一下login;继而去配置流控规则

    上述配置当1秒内访问/log的次数大于2的时候,限流/login

    效果演示使用postman来密集访问/log(QPS=3),然后我们手动浏览器请求/login,看看效果...。postman的如下图

     

    ## 效果演示

    在外面没有启动postman的时候 访问login没有问题;当我们启动postman之后 log的qps达到了阈值;这个时候再去访问login 被限流了、、、

    # 预热Warm Up 

    Warm Up——预热/冷启动方式。当系统长期处于低访问量的情况下,流量突然增加时,可能瞬间把系统压垮。通过warm up方式,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免问题

    即请求QPS从 阈值 10/ 3 开始,经预热时长(10s)逐渐升至设定的QPS阈值(10)

    ## 效果演示
    假设一开始我们疯狂刷新(让QPS大于3) 讲道理一般人的手速可以达到;你会看到被限流了;但是经过10s之后再也不会出错了;因为人的极限不可能1秒点到10次;如果哪位兄弟10s之后还能点击出现限流;请你私聊我。。。

    限流效果图:

  • 相关阅读:
    常见的Mysql十款高可用方案
    01 . OpenResty简介部署,优缺点,压测,适用场景及用Lua实现服务灰度发布
    08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
    TomcatAJP文件包含漏洞及线上修复漏洞
    Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)和HTTP服务器的缺省banner漏洞
    03 . Go开发一个日志平台之Elasticsearch使用及kafka消费消息发送到Elasticsearch
    关于本博客皮肤样式配置
    01 . etcd简介原理,应用场景及部署,简单使用
    Spring Cloud Config
    Spring Cloud Gateway
  • 原文地址:https://www.cnblogs.com/Soy-technology/p/12879991.html
Copyright © 2011-2022 走看看