Sentinel 规则详解

news2024/11/25 22:24:07

Sentinel 规则

  • 流控规则 flow
    • 1、QPS流控
    • 2、并发线程数流控
    • 3、流控模式
    • 4、流控效果
  • 熔断(降级)规则 degrade
    • 1、慢调用比例
    • 2、异常比例
    • 3、异常数
  • 热点规则 param-flow
  • 授权规则 authority
    • 1、应用场景
    • 2、自定义来源
    • 3、授权规则配置
  • 系统规则

前言:
Sentinel 服务容错简介
Doker安装与整合Spring cloud alibaba
作用在资源之上,定义以什么样的方式保护资源,主要包括流量控制规则、熔断降级规则、热点规则以及系统保
护规则。本质就是用来定义如何进行保护资源。

流控规则 flow

  • 流量控制,其原理是监控应用流量的 QPS(每秒查询率) 或 并发线程数 等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。它是针对服务提供方进行设置的。
    在这里插入图片描述

一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果:

  • resource :资源名,即限流规则的作用对象
  • limitApp : 流控针对的调用来源,若为 default 则不区分调用来源
  • grade : 限流阈值类型(并发线程数 或 QPS)
  • count : 限流阈值
  • strategy : 调用关系限流策略(直接,关联,链路)
  • controlBehavior : 流量控制效果(快速失败、Warm Up、匀速排队)
    在这里插入图片描述

流量控制主要有两种统计类型,一种是统计并发线程数,另外一种则是统计 QPS(访问数)。类型由 FlowRule 的grade 字段来定义。其中0 代表根据并发数量来限流,1 代表根据 QPS 来进行流量控制。其中线程数、QPS 值,都是由 StatisticSlot 实时统计获取的。
超出流控限制后便会报错(可通过代码更改报错信息)
在这里插入图片描述

1、QPS流控

  • grade 字段为1,根据对资源的访问次数进行流控。

2、并发线程数流控

  • 并发数控制用于保护业务线程池不被慢调用耗尽。
  • 假设线程数设置为1,当一个线程请求时,如果还没有响应的情况下,另一个线程又进来访问,则这些请求都会排除在外,直到响应后再处理下一个线程。
  • 例如,当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延迟增加,对于调用者来说,意味着吞吐量下降和更多的线程数占用,极端情况下甚至导致线程池耗
    尽。
    • 为应对太多线程占用的情况,业内有使用隔离的方案,比如通过不同业务逻辑使用不同线程池来隔离业务自身之间的资源争抢(线程池隔离)。这种隔离方案虽然隔离性比较好,但是代价就是线程数目太多,线程上下文切换的 overhead 比较大,特别是对低延时的调用有比较大的影响。
  • Sentinel 并发控制不负责创建和管理线程池,而是简单统计当前请求上下文的线程数目(正在执行的调用数目),如果超出阈值,新的请求会被立即拒绝,效果类似于信号量隔离。并发数控制通常在调用端进行配置。

3、流控模式

  • 直接:接口达到限流条件时,开启限流。即只对指定的接口进行流控。也是默认的模式。
  • 关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流。
    • 当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。
    • 比如对数据库同一个字段的 读操作和写操作 存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢。
    • 为读操作增加关联流控关联写操作,这样写操作的次数也会被统计在读操作流控中,而对于写操作本身没有任何影响。
  • 链路:统计从指定上级接口链路访问到本资源的请求,触发阈值时,对指定链路限流。
    • 例如,OrderController 控制器类中的 message1 和 message2 这两个方法都会调用 Service 中的 message 方法,这时就可以针对这两个链路的 message资源 进行限流了。
    • 注意:
      • Service 中的 message 方法需要用 @SentinelResource 注解指定资源名(或异常处理函数,因为不会走统一异常处理)
      • Sentinel 1.7 版本后,Sentinel默认会将Controller方法做context收敛,导致链路模式的流控失效,
        需要添加配置:
spring.cloud.sentinel.webContextUnify=false # 关闭context收敛

在这里插入图片描述

4、流控效果

所谓流控效果,是指当服务被流控了,以什么样的效果去处理。在 Sentinel 中,内置了以下三种处理方式:

  • 快速失败(默认): 是默认的流量控制方式,当超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException 。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时。
  • Warm Up(预热):即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在预热时长内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。
    • 冷加载因子:codeFactor 默认是3,即请求 QPS 从 count / 3 开始,经预热时长逐渐升至设定的 count 阈值 。
    • 需要设置 预热时长(秒)
  • 排队等待:会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。
    • 需要设置 超时时长(毫秒)
    • 让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。

熔断(降级)规则 degrade

熔断规则就是设置当满足什么条件的时候,对服务进行降级
它通常是在服务消费端来进行配置。
熔断降级规则(DegradeRule)包含下面几个重要的属性:

Field说明默认值
resource资源名,即规则的作用对象
grade熔断策略,支持慢调用比例/异常比例/异常数策略慢调用比例
count慢调用比例模式下为 慢调用临界 RT(超出该值计为慢调用)异常比例/异常数模式下为 对应的阈值
timeWindow熔断时长,单位为 sminRequestAmount
熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入)5
statIntervalMs统计时长(单位为 ms),如 60*1000 代表分钟级(1.8.0引入)1000m
sslowRatioThreshold慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)

1、慢调用比例

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

2、异常比例

  • 当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。
  • 经过熔断时长后熔断器会进入探测恢复状态(HALFOPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0] ,代表0% - 100%。
    在这里插入图片描述

3、异常数

  • 当单位统计时长内的异常数目超过阈值之后会自动进行熔断。
  • 经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
  • 注意:异常降级 仅针对业务异常 ,对 Sentinel 限流降级本身的异常( BlockException )不生效。

在这里插入图片描述

热点规则 param-flow

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

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

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

  • Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。

  • 热点参数规则(ParamFlowRule )类似于流量控制规则(FlowRule ):

属性说明默认值
resource资源名,必填
count限流阈值,必填
grade限流模式QPS 模式
durationInSec统计窗口时间长度(单位为秒),1.6.0 版本开始支持1s
controlBehavior流控效果(支持快速失败和匀速排队模式),1.6.0 版本开始支持快速失败maxQueueingTimeMs
sparamIdx热点参数的索引,必填,对应 SphU.entry(xxx, args) 中的参数索引位置paramFlowItemList参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面 count 阈值的限制。 仅支持基本类型和字符串类型
clusterMode是否是集群参数流控规则false
clusterConfig集群流控相关配置
  • 注意:要实现热点参数规则,必须使用 @SentinelResouce 注解来指定资源,否则热点规则将不会生
    效。
@GetMapping("/message1")
@SentinelResource(value = "messages1", blockHandler = "hotBlock")
public String message1(Integer id) throws Exception {
    return "message1" + id;
}
public String hotBlock(Integer id, BlockException e) {
    return "热点规则限流....";
}
  • 先添加热点规则
    在这里插入图片描述

  • 可以在热点规则里添加 参数例外项(对指定参数进行额外处理)
    在这里插入图片描述

授权规则 authority

  • 很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。
  • 来源访问控制根据资源的请求来源(origin)限制资源是否通过
    • 若配置白名单则只有请求来源位于白名单内时才可通过;
    • 若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。
  • 来源访问控制规则( AuthorityRule )非常简单,主要有以下配置项:
    • resource :资源名,即限流规则的作用对象。
    • limitApp :对应的 黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB 。
    • strategy :限制模式, AUTHORITY_WHITE 为白名单模式, AUTHORITY_BLACK 为黑名单模式,默认为白名单模式。

1、应用场景

  • 假设有三个微服,分别为 A、B 和 C。而 A 和 B 都会访问 C。如果希望 A 可以访问 C,而 B 不能访问
    C,则可以进行授权规则配置来实现。
    在这里插入图片描述

  • 流控应用:是来源标识,Sentinel 提供了 RequestOriginParser 接口来处理来源。只
    要 Sentinel 保护的接口资源被访问,Sentinel 就会调用 RequestOriginParser 的实现类去解析访问来源。

2、自定义来源

  • 区分来源,本质是从 request 作用域中获取参数,交给流控应用处使用。
  • 在 微服中创建一个 config 包,并在这个包下新建一个
    类(例如 RequestOriginParserDefinition),并让这个类实现 Sentinel 提供的
    RequestOriginParser 接口,并添加注解注入Spring,然后重写 parseOrigin 方法即可。
@Configuration
public class RequestOriginParserDefinition implements RequestOriginParser {
    @Override
    public String parseOrigin(HttpServletRequest request) {
        return request.getParameter("serverName");
    }
}

3、授权规则配置

  • 启动微服务,浏览器正常访问接口,在url地址后添加?serverName=来源,例如:
    http://localhost:8072/order/message1?serverName=pc
  • 然后再 Sentinel 客户端中添加授权即可。

系统规则

  • 系统保护规则是从应用级别的入口流量进行控制,从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和 并发线程数等几个维度监控应用指标,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
  • 系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量 (进入应用的流量) 生效。
  • Load 自适应(仅对 Linux/Unix-like 机器生效):系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统
    保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores *2.5 。
  • CPU 使用率(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。
  • 平均 RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
  • 并发线程数:当单台机器上所有入口流量的并发线程数达到 阈值 即触发系统保护。
  • 入口 QPS:当单台机器上所有入口流量的 QPS 达到 阈值 即触发系统保护。

在这里插入图片描述

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

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

相关文章

代码随想录day1 | 704.二分查找 27.移除元素

一、二分 1、二分易错点 1、循环变量 while(left < right) 还是while(left <right)2、判断条件 if(num[mid] > tar) mid right 还是 mid right -12、循环不变量 [left, right] [left, right) (left, right]3、左闭右闭写法 当时左闭右闭时&#xff0c;while循…

2、基于kubeadm搭建K8S环境

目录 一、环境说明 二、初始化所有节点 三、修改三台服务器主机名&#xff0c;并写入host文件 四、调整内核参数 五、所有节点安装Docker 六、所有节点配置K8S源 七、所有节点安装kubeadm&#xff0c;kubelet和kubectl 八、部署 kubernetes Master 节点 九、k8s-node …

基于docker的keepalived+MySQL主从实现MySQL高可用

因生产需要对MySQL做高可用&#xff0c;同时&#xff0c;资源有限&#xff0c;因此采用双节点主从keepalived方式实现高勇。另外因需要大批量部署MySQL集群&#xff0c;需要采用模板化部署&#xff0c;本方案采用将MySQL容器化&#xff0c;实现MySQL模板化配置部署。 部署环境及…

SpringMVC学习笔记--上篇

SpringMVC学习笔记 1、SpringMVC 1.1、什么是SpringMVC Spring MVC是Spring Framework的一部分&#xff0c;是基于Java实现MVC的轻量级Web框架。 1.2、SpringMVC的特点 Spring MVC的特点&#xff1a; 轻量级&#xff0c;简单易学高效 , 基于请求响应的MVC框架与Spring兼容…

Python深度学习-有向图合并、排序、最长路径计算

一、有向图方向、权重表示方法 Python通常使用有向图中边的起点和终点来表示边的方向。例如&#xff0c;如果有一条从节点A到节点B的边&#xff0c;则可以使用以下方式表示该有向边&#xff1a; graph {A: {B: 1} }在这个例子中&#xff0c;节点A和节点B之间存在一条权重为1…

谷歌插件下载Redux DevTools管理Redux数据

我们在做 react-redux开发时 很多时候可能无法确定自己的数据有没有成功导进来 这里就有个不错的谷歌插件推荐给大家 大家可以下载我的资源 谷歌插件Redux DevTools 这里 我们打开 Google Chrome浏览器 然后 直接在谷歌浏览器上访问 chrome://extensions/ 如果你的第一次进入 …

【网络安全】学过编程就是黑客?

我们不可否认的是黑客为我们带来了巨大的财产损失于危机&#xff0c;即使其最初的思想是正确的。 个人主页&#xff1a;【&#x1f60a;许思王】 文章目录 前言黑客 &#x1f4bb;起源&#x1f697;发展&#x1f463;黑客守则&#xff08;真的假的&#x1f914;&#xff09;黑…

合并cyclonedx格式的bom文件

1.工具下载 https://github.com/CycloneDX/cyclonedx-cli/releases 2.操作记录 Usage: cyclonedx [options] [command] Options: --version Show version information -?, -h, --help Show help and usage information Commands: add Add information to a BOM (currently…

【图像处理】:相机对焦的原理和实现方法

相机对焦的原理和实现方法 1 原理介绍&#xff1a;1.1点扩散函数“原理:1.2 测距原理:对焦的本质是测距&#xff1a;1.3.相位检测只原理: 2.实现方法2 1 原理介绍&#xff1a; 对焦有三种思路: 1.1点扩散函数“原理: 也就是观测画面中线条边缘的对比度&#xff0c;对比度最高…

微信小程序代码审核,提示需要添加文娱-其他视频类目

这个解决办法有三个 一个是按照指引去申请资质 第二个是通过后端写一个鉴权接口&#xff0c;审核时候去通过接口返回的布尔值去隐藏掉视频模块&#xff0c;通过后再显示出来 第三个是服务除视频内容外还存在其他形式的情况可以通过引入第三方视频插件来解决&#xff0c;但是…

初识Golang,集简洁与性能与一体的语言

文章目录 一、Go语言介绍二、Go语言特性三、Go语言用途四、开发环境搭建五、建立工作区并创建Go程序六、入口文件基本代码介绍七、go命令介绍7.1 基本命令7.2 build 与 run命令7.3 install命令介绍 八、命名规范8.1 变量规范定义8.2 关键字8.3 保留字8.4 需要注意的问题 道阻且…

AIGC 爆火,浪潮信息要做大模型的数据存储大底座

AIGC 在 2023 年爆火&#xff0c;各类大模型层出不穷&#xff0c;参数动辄达到千亿数量级。这些背后&#xff0c;数据的类型和形式也走向复杂多样。例如大模型会采用到我们真实物理世界中的文字、视觉、音频、3D、雷达、多谱等复杂多样的不同模态信号和数据&#xff0c;数据则又…

【Android复习笔记】系统进程(一)

Android 系统进程有哪些 先来一个整体结构图从宏观上理解Android系统的进程结构布局: 这里我们简单总结一下: 系统的第一个进程其实是0号进程(又叫swapper进程/Idle进程) 0号进程fork出了1号进程(init进程)和2号进程(kthreadd进程) 1号进程是所有普通用户进程的祖先,2号进程…

利用Adobe Acrobat DC实现图片和PDF互相转换

一、图片转PDF 可以实现多张或者单张图片转PDF! 这个需要使用到Adobe Acrobat DC的文件合并功能&#xff0c;因为Adobe Acrobat DC的文件合并&#xff0c;不仅可以合并多个pdf文件&#xff0c;也支持合并图片文件。 如图&#xff0c;直接选中多张图片合成即可&#xff1a; 添…

微服务系列文章之 Redisson实现分布式锁(3)

一、概述 1、技术架构 项目总体技术选型 SpringBoot2.4.5 Maven3.5.4 Redisson3.5.4 lombok(插件)2、加锁方式 该项目支持 自定义注解加锁 和 常规加锁 两种模式 自定义注解加锁 DistributedLock(value"goods", leaseTime5)public String lockDecreaseStock(…

84. 求1+2+…+n

链接&#xff1a; 链接 题目&#xff1a; 求 12…n12…n&#xff0c;要求不能使用乘除法、forfor、whilewhile、ifif、elseelse、switchswitch、casecase 等关键字及条件判断语句 (A?B:C)(A?B:C)。 数据范围 1≤n≤500001≤n≤50000。 样例 输入&#xff1a;10输出&#xff1…

【MySQL】不允许你不会使用组合查询

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0…

ASEMI-1N4007是什么二极管,1N4007是什么类型的二极管

编辑-Z 1N4007是一种常见的二极管&#xff0c;属于快恢复二极管&#xff08;Fast Recovery Diode&#xff09;的一种。它是一种高压、高电流的整流二极管&#xff0c;常用于电源电路中的整流器。1N4007的最大反向电压为1000V&#xff0c;最大正向电流为1A&#xff0c;具有较低…

第十七章 原理篇:Deformable DETR

参考教程&#xff1a; 论文&#xff1a;https://arxiv.org/pdf/2010.04159.pdf 源码&#xff1a;https://github.com/fundamentalvision/Deformable-DETR 文章目录 Deformable ConvDeformable DETR计算量MethodDeformable Attention ModuleDeformAttn计算量Multi-scale Defor…