IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【cloud Alibaba】(二)流量控制、熔断降级(上)——Sentinel -> 正文阅读

[Java知识库]【cloud Alibaba】(二)流量控制、熔断降级(上)——Sentinel

在这里插入图片描述

??各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛

🍹 Sentinel

🍸 什么是Sentinel

??官网上如是介绍到:随着微服务的流行,服务和服务之间的稳定性变得越来越重要,Sentinel以流星为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。说白了Sentinel就是hystrix(豪猪哥)的阿里翻版,他能实现和豪猪哥一样的功能,但是比之前者它还提供了图形化的操作界面,操作起来更加的方便快捷

??Sentinel应用场景十分重要且丰富: 它承接了阿里巴巴近年的双十—大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等

🍸 Sentinel下载安装配置

??第一步: 下载Sentinel监控页面jar:https://github.com/alibaba/Sentinel/tags在这里插入图片描述
??第二步: 使用命令运行jar,访问管理界面(用户名密码默认为sentinel),此时要保证8080端口没有被占用,否则就会产生端口冲突

java -jar 

🍹 Sentinel项目实战

初始化监控服务

??该项目中会创建一个新的子模块,然后通过配置文件将其注册进nacos注册中心,且通过sentinel进行实时监控
??第一步: 创建一个子模块,并引入相关依赖

<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!--SpringCloud ailibaba sentinel-datasource-nacos 后续sentinel做持久化用到-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

<!--SpringCloud ailibaba sentinel -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

??第二步: 配置文件

server:
  port: 8401

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848   #Nacos服务注册中心地址
    sentinel:
      transport:
        dashboard: localhost:8080   #配置Sentinel dashboard地址
        port: 8719

management:
  endpoints:
    web:
      exposure:
        include: '*'

??第三步: 主程序类

@EnableDiscoveryClient
@SpringBootApplication
public class CloudAlibabaSentinelService8401 {

    public static void main(String[] args) {
        SpringApplication.run(CloudAlibabaSentinelService8401.class, args);
        System.out.println("启动成功");
    }

}

??第四步: controller接口,访问浏览器显示相应字符串而已,没有任何联动,主要是为了后面的

@RestController
public class FlowLimitController {
    @GetMapping("/testA")
    public String testA() {
        return "------testA";
    }

    @GetMapping("/testB")
    public String testB() {
        return "------testB";
    }

}

先启动nacos,然后启动sentinel的监控jar包,最后启动主程序类
此时sentinel测监控页面并不会有任何的服务,因为sentinel使用的是懒加载机制,只有被监控服务有被访问时图形界面才会显示相应的监控图表信息,该服务一段时间没有被访问的话之前的图表数据也会消失在这里插入图片描述

🍸 流控规则配置

??流控配置就是对微服务里接口的流量控制配置,该配置精准到微服务的具体接口,如果该接口的访问超出了手动配置的阈值,就会执行相应的结果(这里阈值和结果都是自己在页面上配置的)
在这里插入图片描述
上面弹窗里所有配置项的意思都在下面进行解释,当需要对一个接口的访问进行限流时,即可参照规则进行流控配置在这里插入图片描述

??使用QPS进行阈值设置的请求,会在一秒内达到阈值之后的所有请求选择流控效果默认都直接失败,页面返回失败信息,这些失败的请求甚至没有到请求业务就直接失败了
?? 而使用线程数进行阈值设置的请求,在请求线程数达到阈值之后的所有请求无法选择流控效果,这些请求会打进业务但是无法执行就页面返回失败信息

流控模式: 关联
?? 通过关联配置,关联的接口资源出现问题被限流,对应的接口资源也会被限流,比如说/testA在流控配置的时候关联了/testB,那么一旦/testB被限流/testA也同样会被限流

流控效果: Warm Up
?? 预热,sentinel默认选择该流控效果后需要填写预热时长(只有QPS阈值才可选),配置之后,预热时长范围内阈值都是QPS对3取模,经过预热时长后阈值才恢复预定阈值

比如说使用QPS阈值,单机阈值为13,选择Warm Up效果,预热时长为5,那就意味着前5S(预热时长),接口每秒内最多可接受4次请求(13%3=4),等到过了预热时间5S之后,该接口每秒内最多可接受13(QPS)次请求

流控效果: 排队等待
??匀速排队方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第—秒直接拒绝多余的请求。

🍸 熔断规则配置

??Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制让请求快速失败,避免影响到其它的资源而导致级联错误。
??当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断。Sentinel和hystrix的熔断降级是非常像的,但是Sentinel并没有像hystrix一样的半开状态(也就是缓冲状态一段时间正常之后就结束熔断)

降级策略: RT在这里插入图片描述
??统计时长(1000ms)内,请求数超过最小请求数(5)并且在最大RT时间(200ms)内没有处理完本次任务的话,就会在未来的熔断时长(1s)内对该服务进行熔断,断路器打开微服务不可用

降级策略: 异常比例在这里插入图片描述
??当资源的每秒请求量大于最小请求数(5),并且每秒异常总数占通过量的比值超过比例阈值(0.2)之后,资源进入降级状态,即在接下的统计时长(1000ms)内,对该服务进行熔断,断路器打开微服务不可用,对这个方法的调用都会自动地返回。

降级策略: 异常数在这里插入图片描述
??当统计时间(1000ms)内的请求数量超过最小请求数(5),并且这1s中的异常数目超过异常数(10)之后会进行熔断,即在接下的统计时长(1000ms)内,对该服务进行熔断,断路器打开微服务不可用,对这个方法的调用都会自动地返回。

🍸 热点key配置

在这里插入图片描述
??每统计窗口时长(1s)内,如果该接口接收到的请求中 参数列表包含索引为0的参数(也就是参数列表中的第一个参数),且数量超过单机阈值(1)的话就会对该服务进行熔断降级,对这个方法的调用都会自动地返回。

??根据上面的描述,接口有两个参数p1、p2,如果请求为http://localhost:8401/testHotKey?p1=a或者http://localhost:8401/testHotKey?p1=a&p2=b不符合热点规则,将会触发熔断降级,但是http://localhost:8401/testHotKey?p2=b将不会触发降级

高级选项

??想要使用热点规则的高级选项的话,必须从热点规则处新增,不能通过簇点链路新增。通过下面的配置,就可以实现p1有热点key限制阈值为1,但是如果p1旳值为abc的话阈值就是200、值为qaz的话阈值就是23.在这里插入图片描述

🍸 系统规则配置

??上面涉及到的配置都是具体到接口级的,对单个接口的流控、熔断、热点key监控配置,但是Sentinel系统规则配置是针对整个系统而言的监控配置

入口QPS
??入口QPS就是对整个系统的请求数进行限制,并不指定接口请求,只要系统内所有请求的请求数到达阈值就会降级在这里插入图片描述
Load自适应
??该设置仅对Linux/Unix-like机器生效,系统的 load1作为启发指标,进行自适应系统保护。当系统load1超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR阶段)。系统容量由系统的 maxQps * minRt估算得出。设定参考值一般是cPu cores * 2.5。

CPU使用率
??当系统CPU使用率超过阈值即触发系统保护(取值范围0.0-1.0) ,比较灵敏。

平均RT
??当单台机器上所有入口流量的平均RT达到阈值即触发系统保护,单位是毫秒。

并发线程数
??当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:38:26  更:2022-09-30 00:39:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/10 15:47:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码