Sentinel的规则

news2024/11/18 6:48:37

四.Sentinel的规则

1.流控规则

1.1流控规则有哪些?

流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS(每秒查询率)、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。

在这里插入图片描述

资源名:

唯一的资源名称,默认是接口路径,也可以自定义.

针对来源:

指定对哪个微服务进行限流,这里填写服务名,默认是default,表示不区分来源。

阈值类型:

QPS: 每秒请求数,当调用当前接口的每秒请求数达到阈值,则限流

线程数:当调用当前接口的线程数达到阈值,则限流。

流控模式:

**直接:**当前资源达到限流条件时,开启限流。

关联: 当关联的资源达到限流条件时,开启限流.

例如存在资源 A和B,A资源依赖B资源,当B资源达到阈值,则限流A。

比如支付模块B达到阈值,则限流订单模块A,因为支付已经达到上限了,过量的订单会使得支付压力更大,需要限流。

**链路:**只针对从指定链路访问到本资源的请求做统计,判断是否达到限流条件时,开启限流.

例如有两条请求链路:

/query    /queryUsers
/save     /queryUsers

如果只限制从/search进入到/goods的请求,就可以设置链路模式.

流控效果

快速失败

预热Warm UP

排队等待

1.2流控模式

1.直接模式

上面已演示

2 关联模式的使用

1.添加测试代码

在这里插入图片描述

2.添加流控规则

当关联资源/pay的阈值达到3时,资源/addOrder被流控

在这里插入图片描述

3.模拟关联资源/pay超过阈值

在这里插入图片描述

在这里插入图片描述

启动

4.测试结果

/test1被流控

在这里插入图片描述

3链路模式的使用

1.添加测试代码

在这里插入图片描述

在这里插入图片描述

Sentinel默认只标记Controller中的方法为资源,如果要标记其它方法,需要利用@SentinelResource注解。

2.添加流控规则

对从/query路径调用users资源(也就是queryUsers方法)进行流控,这里为了方便测试,阈值设置为1

在这里插入图片描述

3.设置关闭context整合

如果直接测试上述规则,会发现没有作用,这是因为自从 sentinel-spring-webmvc-adapter -1.7.2 开始,在SentinelWebMvcConfig对象(sentinel参数配置类)中含有一个webContextUnify属性,默认值为true,表示合并web context,达到节约内存的目的;如果设置为false,表示入口处的contexts会拆分为不同的url。我们针对链路模式,必须设置为false,否则会导致链路模式不生效。

在这里插入图片描述

4.测试

启动服务测试:

当一秒内访问超过1次,就报错.

在这里插入图片描述

后续我们会对此做降级处理,而不是只是返回异常。

1.3 流控效果

1.快速失败

就是被限流时,返回失败信息到页面

在这里插入图片描述

2.预热Warm UP

默认coldFactor冷加载因子为3,即请求QPS从(请求总数/3)开始,经过我们设置的时间才逐渐升至设定的QPS阈值。

例如:阈值为10,预热时长设置为4秒

在这里插入图片描述

限流效果:系统初始化的阈值为10/3等于3.即阈值刚开始为3.如果刚开始每秒请求数大于3则默认失败。过了4秒后阈值才慢慢升高恢复到10,即4秒后能承受大于3但是仍要小于10的请求,才不会被限流

应用场景

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

3.排队等待

让请求以均匀的速度通过,单机阈值为每秒通过数量,其余的排队等待。他还会设置一个超时时间,当请求超过超时时间还未处理,则会被丢弃.

注意:

阈值类型必须设置为QPS,否则无效

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

例如:对资源/goods设置每秒1次请求,超过的话就排队等待,等待的超时时间为20000毫秒。

在这里插入图片描述

测试:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

应用场景:

这种方式主要用于处理间隔性突发的流量,例如消息队列。在某一秒有大量的请求到来,而接下来的几秒则可能处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,以起到“削峰填谷”的效果,而不是拒绝所有请求。

2.降级规则

Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断

1.慢调用比例

熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置。

选择以慢调用比例作为阈值,需要设置允许的慢调用RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长内请求数目大于设置的最小请求数目,并且慢调用比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求响应时间小于设置的慢调用RT则结束熔断,若大于设置的慢调用RT则会再次被熔断.

例如:以下配置的含义为:如果1秒内持续进入大于等于5个请求,并且请求响应的时间大于1000ms时,这个请求即为慢调用,当慢调用的比例大于0.5时会触发降级,熔断时间为5秒。

在这里插入图片描述

测试:

添加测试代码:

在这里插入图片描述

Jmeter中模拟多个慢应用并运行

在这里插入图片描述

再浏览器中访问test接口时,会被降级

在这里插入图片描述

2.异常比列

如果1秒内持续进入大于等于最小请求数,并且请求出现异常的比例超过比例阈值时,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断

例如:如下配置为:如果1秒内持续进入大于等于5个请求,并且请求出现异常的比例超过0.5时,会触发降级

在这里插入图片描述

测试代码:

添加代码,模拟出异常情况

在这里插入图片描述

Jmeter中模拟多个慢应用并运行

在这里插入图片描述

浏览器中访问test2接口

在这里插入图片描述

3.异常数

如果1秒内持续进入大于等于最小请求数,并且请求出现异常的次数超过设置的异常数时,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求响应时间小于设置的慢调用RT则结束熔断,若大于设置的慢调用RT则会再次被熔断.

在这里插入图片描述

触发熔断后的处理措施:

1.提供fallback实现服务降级

2.读缓存(DB访问降级)

3.返回错误result

3.热点参数流控规则

1.1什么是热点参数流控

热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制

用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。

热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

1.2 测试

添加测试代码:

在这里插入图片描述

添加规则:

对资源getGoodsById中的第一个参数整体限流10,但对其中的id=1的值限流3.

在这里插入图片描述

在这里插入图片描述

4.系统规则

当容量评估不到位,某个大流量接口限流配置不合理或者没有配置,导致系统崩溃,或者突然发现机器的load和CPU等开始飙升,但不能快速确认是什么原因造成等,这时候,需要一个全局的兜底防护方案,即使缺乏容量评估也能有一定的保护机制。这就是系统保护规则。

Sentinel系统自适应限流从整体维度对应入口流量进行控制,结合应用的Load、cup使用率、总体平均RT、入口QPS和并发线数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

在这里插入图片描述

load自适应(仅对Linux/Unix系统有效)

当系统load1(1分钟平均负载)超过阈值,且并发线程数超过系统容量时触发。其中的load1,可以在Linux系统上通过命令 uptime 查看,这个命令返回3个值,分别为load1、load5、load15,表示系统1分钟的平均负载、5分钟的平均负载、15分钟的平均负载。

CPU usage(1.5.0+ 版本): 当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。
平均 RT: 当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
并发线程数: 当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
入口 QPS: 当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

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

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

相关文章

深度学习时数据量过大的一个解决思路:将零散的数据集中化

问题描述 最近笔者在做一个kaggle上的树叶分类的题目(https://www.kaggle.com/competitions/classify-leaves),这个题目要求根据一张树叶的图片给出这片树叶的类别,这个题目也是沐神的《动手深度学习》课程里的一个课程竞赛题目。…

编译原理笔记03

第四章 语义分析 语义分析也称为类型检查,上下文相关分析,主要负责检查程序的上下文相关的属性,例如变量使用前要声明,函数调用要与声明一致等。 1.语义规则 通常来说,程序设计语言都采用自然语言来表达程序语言的语义…

JMeter分布式压测

一、Jmeter4.0分布式压测准备工作 压测注意事项 the firewalls on the systems are turned off or correct ports are opened. 系统上的防火墙被关闭或正确的端口被打开。 all the clients are on the same subnet. 所有的客户端都在同一…

数据科学与工程理论基础复习提纲

一、Sketch 1.1 简单抽样算法 1.1.1 核心思想 对于到达的元素aia_iai​,以概率pM/mpM/mpM/m对该元素的频数加1。 MMM:抽样后的数据流大小mmm:原始数据流大小 1.1.2 操作 更新:当元素aia_iai​到达时,以ppp的概率更…

分库分表:垂直分库、垂直分表、水平分库、水平分表四个概念

文章目录一、分库分表的意义二、垂直分表的思路三、垂直分库的思路四、水平分库的思路五、水平分表的思路一、分库分表的意义 随着公司业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫。分析一下问题出现在哪儿呢&#xf…

太强了,阿里内部JDK源码剖析知识手册,由浅入深堪称完美

前言 作为Java程序员,在这里想问问大家在空余时间有没有去读过 JDK 源码,虽然读源码有点自不量力的感觉,(大佬可以忽略这句)但是如若能够经常在空余时间看一下 jdk 源码不仅可以让自己对日常的开发环境了解得更加深刻…

【nowcoder】笔试强训Day3

目录 一、选择题 二、编程题 2.1在字符串中找出连续最长的数字串 2.2 数组中出现次数超过一半的数字 一、选择题 1.以下代码运行输出的是 public class Person{private String name "Person";int age0;} public class Child extends Person{public String gra…

Python json常见用法

目录 导包 api介绍 常见用法 json转python内置对象 字典对象 数组对象 文件读取 python内置对象转json 字典转json 字典转json(压缩存储) 字典转json(美化输出) 文件读取 自定义对象 普通对象 嵌套对象 补充支持 …

设计一个亿级高并发系统架构 - 12306火车票核心场景DDD领域建模

“ 架设一个亿级高并发系统,是多数程序员、架构师的工作目标。 许多的技术从业人员甚至有时会降薪去寻找这样的机会。但并不是所有人都有机会主导,甚至参与这样一个系统。今天我们用12306火车票购票这样一个业务场景来做DDD领域建模。” 开篇 要实现软件…

数据库系统概论第七章(数据库设计)知识点总结(1)—— 概述

本专栏收录了数据库的知识点,而从本文起,将讲述有关于数据库设计有关知识点,提供给有需要的小伙伴进行学习,本专栏地址可以戳下面链接查看 🎈 数据库知识点总结(持续更新中):【数据库…

了解学习node中著名的co模块原理,生成器+promise实现async+await

***内容预警*** 新手内容,菜鸟必看,大佬请绕道 首先 co 是一个npm第三方模块,我们需要npm install 之后才能使用它。 作为一个菜鸟我相信你肯定没有用过这个模块,但是据说这个模块很有名,那么我们就有必要来了解一下它…

35. 池化层 / 汇聚层 代码实现

1. 池化层 在下面的代码中的pool2d函数,我们实现汇聚层的前向传播。 这类似于之前文章中的的corr2d函数。 然而,这里我们没有卷积核,输出为输入中每个区域的最大值或平均值。 from torch import nn from d2l import torch as d2l# X是输入&…

实习------Java基础

基础语法 基本数据类型(熟悉) Java有哪些数据类型 定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。 boolean类型占多少个字节? boolean类型…

【docker】手把手教学docker与docker-compose安装

目录 1、docker安装 2、docker-compose安装 1、docker安装 方式一 https://fanjufei.blog.csdn.net/article/details/123500511https://fanjufei.blog.csdn.net/article/details/123500511 方式二 通过命令行安装。 sudo apt install docker.io sudo systemctl status doc…

linux篇【12】:计算机网络<后序>

一.tcp接入线程池(使用线程池) 1.tcp初步接入线程池 我们设置了对应的任务是死循环,那么线程池提供服务,就显得有不太合适。我们给线程池抛入的任务都是短任务 因为他并没有访问任何类内成员,所以可以把执行方法提到…

智能服务机器人简介

文章大纲 服务机器人上升趋势明显服务机器人核心技术与应用场景目标跟踪人脸识别算法SLAM 即时定位与地图构建(Simultaneous Localization and Mapping,简称SLAM)老人看护手势识别多模态与机器人参考文献与学习路径服务机器人上升趋势明显 服务机器人充分融合机器视觉、语音…

【Redis—持久化】

1.持久化机制 持久化就是把内存的数据写到磁盘中,防止服务宕机导致内存数据丢失。 2.AOF AOF概述 AOF持久化:以独立日志就把该命令。以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令达到恢复目…

K8S-存储-Volume

问题 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃 时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。…

IDEA 控制台日志中文乱码解决方案

老白新学JAVA,初用IDEA,控制台打印中文总是乱码,网上找了好多解决方法,都不好用,下面记录解决过程。 1.修改idea64.exe.vmoptions ,打开最后一行增加如下代码 idea快捷方式右键->属性->打开文件所有位置&#x…

Redis 性能优化 —— 内存碎片

文章目录一、内存碎片场景描述二、内存碎片概念解析三、内存碎片产生原因四、内存碎片如何判断五、内存碎片解决方案六、内存碎片扩展技能一、内存碎片场景描述 作为内存数据库,内存空间的大小对于 Redis 来说是至关重要的。内存越多意味着存储的数据也会越多&#…