【Sentinel】流控、熔断、热点基本介绍和使用

news2024/11/18 4:24:55

目录

  • 环境介绍
  • Sentinel的使用可以分为两个部分
  • Sentinel管理控制台
  • 客户端接入控制台
  • 配置启动参数
  • 流控规则
    • 名词解释
  • 熔断策略
    • 公共字段说明
    • 慢调用比例
      • 字段说明
    • 异常比例
      • 字段说明
      • 异常数
      • 字段说明
  • 热点规则

环境介绍

开发依赖版本
Spring Boot3.0.6
Spring Cloud2022.0.2
Spring Cloud Alibaba2022.0.0.0-RC2
JDK20

Sentinel的使用可以分为两个部分

  • 控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。
  • 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。

Sentinel管理控制台

  • 下载jar包: https://github.com/alibaba/Sentinel/releases
  • 1.8.6下载地址: https://objects.githubusercontent.com/github-production-release-asset-2e65be/128018428/cb34497a-008e-48c3-a752-e79684e05fa2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230523%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230523T083059Z&X-Amz-Expires=300&X-Amz-Signature=68683a7d73f412ad70cd7fa3adfed3e6f756a313af334985cae8be206b567628&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=128018428&response-content-disposition=attachment%3B%20filename%3Dsentinel-dashboard-1.8.6.jar&response-content-type=application%2Foctet-stream
  • 服务启动: java -server -Xms64m -Xmx64m -Dserver.port=8849 -Dcsp.sentinel.dashboard.server=localhost:8849 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.6.jar
  • 浏览器输入: http://localhost:8849
  • 默认账号密码: sentinel/sentinel
  • -Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel
  • -Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel

客户端接入控制台

父工程引入alibaba实现的SpringCloud

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

子工程中引入sentinel

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

配置启动参数

在工程的application.yml中添加Sentinel控制台配置信息

spring:
  application:
    # 这个名称显示在Sentinel控制台,对应Sentinel的应用名称,如果没有配置,默认显示的是com.wen3.framework.demo.sentinel.server1.SentinelServer1Application
    name: Sentinel-server1
  cloud:
    sentinel:
      log:
        # 如果不配置,默认会把日志写到C:\Users\Administrator\logs
        dir: ./logs
      transport:
        #sentinel控制台的请求地址
        dashboard: 127.0.0.1:8849
        # 如果本机有多个网卡,可以手动指定IP
        client-ip: 127.0.0.1
        # Sentinel控制台通过这个端口与应用通讯
        port: 8720
        # 默认为true,表示将调用链路收敛,会导致链路流控效果无效,需要改成false
        web-context-unify: false

配置项可以参考com.alibaba.cloud.sentinel.SentinelProperties

流控规则

名词解释

  • 资源名 : 唯一名称,默认请求路径

  • 针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)

  • 阈值类型/单机阈值:

    • QPS(每秒钟的请求数量):当调用该APIQPS达到阈值的时候,进行限流
    • 线程数:当调用该API的线程数量达到阈值的时候,进行限流
  • 是否集群:当前不需要集群

  • 流控模式:

    • 直接:API达到限流条件时,直接限流
    • 关联:当关联的资源达到阈值时,就限流自己
    • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)(API级别的针对来源)
      在这里插入图片描述
  • 流控效果:

    • 快速失败:直接失败,抛异常

    • Wam Up:根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFacotor,经过预热时长,才达到设置的QPS阈值

      • 预热公式:初始阈值= 设定阈值/coldFactor(默认值为3),经过预热一段时间后才会达到设定的阈值。

      • 预热的访问过程系统允许通过的QPS曲线如下图
        在这里插入图片描述

        在这里插入图片描述

      使用场景:一般秒杀系统中会有这样的流控设置,为了防止秒杀瞬间造成系统崩溃。

    • 排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效
      在这里插入图片描述

    在这里插入图片描述

    注意:匀速排队模式暂时不支持 QPS > 1000 的场景。

熔断策略

公共字段说明

字段名说明
资源名访问的请求路径
熔断时长当条件满足后需要进行熔断的熔断时长,单位:秒
最小请求数在统计时长的时间内,请求数要大于该值,才会判断异常请求数是否大于设置的异常数, 所以最小请求数是触发熔断的另外一个条件
统计时长触发熔断需要统计请求数的时长,单位:毫秒

慢调用比例

慢调用比例是以慢调用数量的比例作为阈值,首先需要设置最大RT(即最大的响应时间,用于鉴定是否是慢调用),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数大于设置的最小请求数,并且慢调用的比例大于比例阈值,则接下来的请求会自动熔断,熔断时间为设置的熔断时长。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若在HALF-OPEN状态下有一个请求响应时间小于最大RT 则结束熔断,否则继续熔断。
在这里插入图片描述

上面的熔断规则表示说: 访问/hello资源时,如果在1000毫秒内,请求数量超过5,并且这些数量中超过1000毫秒的请求数量的比例超过0.5则熔断10秒,10秒后进入半开状态,如果半开状态中有一个请求小于1000毫秒,则取消熔断,否则继续熔断

字段说明

字段名说明
最大RT最大响应时间,单位:毫秒数,用于鉴定是否是慢调用
比例阈值值的是慢调用的比例阈值,是触发熔断的其中一个条件

异常比例

异常比例是以请求异常数量的比例作为阈值,当单位统计时长(statIntervalMs)内请求数大于设置的最小请求数,并且异常请求数的比例大于比例阈值,则接下来的请求会自动熔断,熔断时间为设置的熔断时长。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若在HALF-OPEN状态下有一个请求正常响应 则结束熔断,否则继续熔断。
在这里插入图片描述

上面的熔断规则表示说: 访问/hello资源时,如果在1000毫秒内,请求数量超过5,并且这些数量中异常的请求数量的比例超过0.5则熔断10秒,10秒后进入半开状态,如果半开状态中有一个请求没有异常,则取消熔断,否则继续熔断

字段说明

字段名说明
比例阈值统计时长内异常请求数和总请求数的比例,是触发熔断的其中一个条件

异常数

在这里插入图片描述

上面的熔断规则表示说: 访问/hello资源时,如果在10000毫秒内,请求数量超过5,并且这些数量中异常的请求数量超过2个,则后续的请求进行熔断10秒,10秒后进入半开状态,如果半开状态中有一个请求没有异常,则取消熔断,否则继续熔断

字段说明

字段名说明
异常数统计时长内异常请求数,是触发熔断的其中一个条件

热点规则

何为热点?热点即经常访问的数据。有时候我们某个请求路径中的某个参数更甚至于某个参数值为热点数据。

比如某个商品秒杀,或者说突然降价的热点商品数据, 或者微博中某个人的突发事件等。 这些数据在某一段时间突然暴增,可能会把系统压垮。 所以需要针对他们进行限流,不能影响其他同类。比如:

  • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
  • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效
在这里插入图片描述

官网介绍: parameter-flow-control

在这里插入图片描述

上面的配置表示访问资源hello1时, 参数索引为2这个参数值是1,限定在1秒(统计窗口时长)内只能访问1次,参数值是2只能访问2次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文搞清RabbitMQ的部署运维及使用

1.通过docker-compose安装RabbitMQ 1.0 初始化yum和Docker yum update yum install epel-release -y yum clean all yum list yum install docker-io -y1.1 dockerfile FROM rabbitmq:management MAINTAINER LCJ # 添加插件到指定目录 可按照此方式自行扩展其他插件 # ADD .…

shopee虾皮跨境电商网站商品数据支持网站后缀(.com.my;.vn;.ph)

作为一名技术爱好者&#xff0c;我们总会遇到各种各样的技术问题&#xff0c;需要寻找合适的技术解决方案。而在互联网时代&#xff0c;我们可以快速通过搜索引擎获取丰富的技术资源和解决方案。然而&#xff0c;在不同的技术分享中&#xff0c;我们常常会遇到质量参差不齐的文…

【新星计划·2023】单臂路由的原理讲解

单臂路由是指在路由器的一个接口上通过配置子接口的方式&#xff0c;实现原来互相隔离的VLAN之间可以互相通信。 一、单臂路由概述 网络中通过VLAN技术来实现隔离广播、方便管理及提高安全性等功能&#xff0c;一旦划分VLAN后&#xff0c;同—VLAN之间可以相互通信&#xff0…

【统计模型】瑞典生育率现状与影响因素分析

目录 瑞典生育率现状与影响因素分析 一、研究目的 二、数据来源和相关说明 三、描述性分析 3.1 样本描述 3.2 数据可视化 四、数学建模 4.1 模型建立 4.2 模型结果 &#xff08;1&#xff09;全模型A &#xff08;2&#xff09;全模型B &#xff08;3&#xff09;全…

传奇手游三职业1.80合击服务端三端互通版搭建教程

传奇手游三职业1.80合击服务端三端互通版搭建教程 大家好&#xff0c;我是驰网艾西。随着时代的发展&#xff0c;以前我们热爱的传奇游戏也越来越没有时间玩了&#xff0c;到了一定的年纪大家都有自己的事业以及生活压力。以前我们总是玩PC端所谓的端游&#xff0c;现在大家都…

highcharts矢量图放在图表的最上方

将矢量图对应的y轴的top和height都设置为0 即可 下面红色标注全是y轴的设置 以上这中图怎么实现 其中top是指图表中每个模块的位置&#xff0c;offset表示偏移的位置&#xff0c;height表示每个模块占据整个图标的高度的百分比&#xff0c;opposite表示该y轴是否在右侧&#xf…

麒麟系统安装HDP【已解决】

麒麟系统安装HDP 麒麟系统安装HDP1、软件版本介绍2、文件替换3 报错解决3.1 解决KeyError: HDP-3.1&#xff08;所有机器&#xff09;3.2 安装smartsense-hst&#xff08;所有机器&#xff09;3.3 解决Non-ASCII character \xe5 in file&#xff08;所有机器&#xff09;3.4 解…

如何解决端口号被占用的方法

在学习JavaWeb的过程中&#xff0c;在运行代码的时候经常会提示端口号被占用的情况&#xff1b;出现这情况的主要原因就是没有正常关闭tomcat。 那么遇到这种情况应该怎么解决呢&#xff1f; 首先第一种方式就是把电脑关机重启&#xff0c;这种方法可谓是百试百灵&#xff1b;另…

分类逻辑回归实例一

一、实例背景 假设根据【推荐分值】来对推荐者类型进行分类&#xff1a;高推荐、中推荐、低推荐 二、任务目标 训练出一个模型&#xff0c;来实现根据【推荐分值】&#xff0c;来预测【推荐类型】的分类 三、机器学习实现 1. 核心步骤 实现全流程&#xff1a; 1. 1 建立…

Niagara—— Events and Event Handlers

目录 一&#xff0c;Events 二&#xff0c;Event Handlers 多数情况下&#xff0c;系统中的发射器需相互交互&#xff0c;才能创建所需效果&#xff1b;意味着&#xff0c;一发射器生成数据&#xff0c;另一发射器监听该数据&#xff0c;以执行相应行为&#xff1b;在Niagar…

Linux-初学者系列_docker

目录 Linux-初学者系列_docker一、概念二、安装docker&#xff08;可忽略 跳到第三步&#xff09;三、获取镜像1、下载nginx镜像2、查看本地镜像3、将镜像运行成一个容器01-查看运行的容器02-通过ip端口号访问03-删除端口04-指定镜像名字 4、dockerfile构建镜像5、dockersave构…

HLS入门实践

HLS入门实践 文章目录 HLS入门实践1.HLS基本知识简述1.1 HLS简介1.2 HLS相关知识概念 2. HLS技术认识2.1 与VHDL/Verilog关系2.2 关键技术问题2.3 存在的技术局限性 3. HLS 完成 led 灯闪烁3.1. 新建一个 HLS 工程3.2 添加源文件3.2.1 led.h3.2.2 led.cpp3.2.3 添加 C 仿真文件…

<Linux开发>驱动开发 -之-pinctrl子系统

&#xff1c;Linux开发&#xff1e;驱动开发 -之-pinctrl子系统 交叉编译环境搭建&#xff1a; &#xff1c;Linux开发&#xff1e; linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下&#xff1a; &#xff1c;Linux开发&#xff1e; -之-系统移植 uboot移植过程详细记…

Zabbix 2.0 实验

zabbix自动发现与自动注册 ---------------nginx自动监控报警------------------- 在/etc/nginx/conf.d/default.conf 文件内添加 location /nginx_status {stub_status on;access_log off;allow 127.0.0.1;deny all;}curl -s http://127.0.0.1/nginx_status curl -s http:/…

卷麻了,面试了一个00后,绝对能称为是卷王之王....

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资也不低&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。令我印象最深的是一个00后测试员&#xff0c;他…

数据链路层:Ethernet以太网协议

首先Ethernet、IEEE802.3、PPP和HDLC都是数据链路层的协议&#xff0c;只不过后面三个不常用而已。Ethernet和IEEE802.3属于以太链路层协议&#xff0c;数据链路层最常用的协议是Etnernet以太网协议。 定义&#xff1a; Ethernet以太网协议&#xff0c;用于实现链路层的数据传…

Build History

ISO 登录https://next.itellyou.cn/Original/ Window 盛千装机助手https://wwza.lanzouo.com/s/SQZJ Ubuntu Windows / Linux —— U盘启动盘制作 - 知乎准备工作&#xff1a;系统镜像&#xff1a; Windows 10 / Windows 11 & Manjaro / Ubuntu &#xff08;自行选择下载…

MySQL主从同步(开GTID)

目录 一、搭建简单的主从同步 二、mysql删除主从&#xff08;若没有配置过可以不用进行这一步&#xff09; 1、停止slave服务器的主从同步 2、重置master服务 三、开启GTID 1、Master配置 2、Slave配置 一、搭建简单的主从同步 GTID原理&#xff1a;http://t.csdn.cn/g…

3.36 haas506 2.0开发教程-example -OLED显示生成二维码(python)

OLED显示生成二维码-python 应用场景案例说明1.OLED显示规则2.硬件3.连线图 代码源码链接 应用场景 二维码在各个领域中的应用越来越广泛&#xff0c;其中一些主要应用场景包括&#xff1a; 电子商务&#xff1a;通过二维码&#xff0c;用户可以轻松链接到商家的网站&#xff…

3年前的我废人一个,庆幸当时入了软件测试这行

为什么会学习软件测试&#xff1f; 已经28岁了&#xff0c;算一下快过去3年了&#xff0c;刚毕业那会工作了一年&#xff0c;因为自己当时很迷茫&#xff08;觉得自己挺废的&#xff09;&#xff0c;所以就没去工作就一直在家&#xff0c;家里固定每个月给点生活费&#xff0c…