SpringCloudAlibaba——Sentinel
Sentinel也就是我们之前的Hystrix,而且比Hystrix功能更加的强大。Sentinel是分布式系统的流量防卫兵,以流量为切入点,从流量控制、流量路由、熔断降级等多个维度保护服务的稳定性。
Sentinel采用的是懒加载,这个接口被访问一次,才会被Sentinel监测到加到簇点链路中。
1.流控规则
阈值类型:
QPS设置的是每秒的请求数达到一定阈值,是将请求拦在外面判断处理的。
并发线程数设置的是后台处理请求的线程数量,是将请求都放进来判断处理的。
1.1流控模式
1.1.1流控模式——直接
哪个接口配置了就直接对此接口生效即可,没什么好说的。
1.1.2流控模式——关联
当关联的资源(接口)达到阈值时,就限流自己,比如配置的资源为testA,关联的资源为testB,如果说testB达到阈值了,testA就会被限流。实际的运用场景就是订单调用支付服务,如果支付服务过载了,那么限流一下订单服务就会比较好,能缓解很大的压力。
1.1.3流控模式——链路
多个不同的请求调用同一个接口时,接口可以配置统计从某个入口资源的请求访问数量,如果超额,则此接口限流,整个链路就相当于断了。
1.2流控效果
1.2.1快速失败
超过阈值直接失败,返回Blocked by Sentinel (flow limiting)
1.2.2预热
当突然有多个请求同时过来时,可采用预热。预热中有一个冷因子默认为3,此时如果我们配置的单机阈值为10,预热时长为5,表明刚开始的请求最大限度为10/3=3,超过则会快速失败,需要慢慢预热,等到5s之后,才会升至稳定的阈值10。
Sentinel也就是我们之前的Hystrix,而且比Hystrix功能更加的强大。Sentinel是分布式系统的流量防卫兵,以流量为切入点,从流量控制、流量路由、熔断降级等多个维度保护服务的稳定性。
Sentinel采用的是懒加载,这个接口被访问一次,才会被Sentinel监测到加到簇点链路中。
1.2.3排队等待
阈值类型必须设置为QPS,否则无效,我们设置单机阈值为1,超时时间为20000ms,意思时每一秒只能处理一个请求,多余请求的不会丢弃,而是去排队等待,等待的超时时间为20000ms。
2.降级规则
这里演示的是通过哪些方式可以发生熔断来触发sentinel自带的降级。
注意:Sentinel的断路器是没有半开的状态的。
2.1RT
RT是指平均响应时间,当1s(统计时长)内涌入超过5个请求(最小请求数),如果对应的响应时间超过了设置的阈值(最大RT),熔断器打开,那么在接下来的时间窗口(熔断时长)内,对这个接口的调用都会触发降级返回,窗口时间过去后,熔断器就会自动关闭。
2.2异常比例
当1s内(统计时长)涌入超过5个请求(最小请求数),并且每秒的异常比例超过阈值(比例阈值)之后,就会进入熔断,在接下来的时间窗口内,对这个方法的调用会直接降级返回。如果不满足熔断条件,普通调用如果出异常直接报错。
2.3异常数
当1分钟内(统计时长)涌入超过5个请求(最小请求数),并且1分钟内的异常次数超过阈值(异常数)之后,就会进入熔断,在接下来的时间窗口内,对这个方法的调用会直接降级返回。如果不满足熔断条件,普通调用如果出异常直接报错。
3.Sentinel热点key配置
@SentinelResource注解就是我们之前使用的@HystrixCommand方法,基本相似。
虽然我们经常访问的是同一个接口,比如查询接口,但是由于查询的数据不同,传入的参数也就不同,所以我们可以将一些热门的键和参数值进行限流配置,用blockHandler来定义限流访问时我们自己的兜底方法,但是注意这个兜底方法与之前Hystrix中方法中出现的超时、异常等等的兜底方法不一样,它只负责热点的限流兜底,Hystrix那个得用fallback~~。
fallback管运行异常,blockHandler管配置违规。
3.1普通的键情况
3.2特例情况
我们期望第一个参数如果为某个特殊值比如5时,它的限流和平常的不一样,阈值可以达到200。
4.系统规则
系统规则是整体维度的,而不是细分为资源维度,仅对入口流量生效,入口流量指的是进入应用的流量。相当于在最外层做了保护。
5.@SentinelResource注解说明
如果我们使用了@SentinelResource注解,并给value附上了值,如下:
访问此接口后,sentinel控制台会有两个资源名,如下:
此时注意,如果我们给byUrl添加流控,就表明我们要使用自定义的兜底方法,但是我们并没有用blockHandler定义该有的兜底方法,那么如果限流了sentinel不会使用自己默认自带的,会返回error错误信息。
如果我们给/rateLimit/byUrl添加流控,如果限流了sentinel会使用自己默认自带的。
我们现在的兜底方案面临的问题:
1.系统默认的,没有体现我们自己的业务要求。
2.依照现有条件,我们自定义的处理方法又和业务代码耦合在一块,不直观。
3.每个业务方法都添加一个兜底的,那代码膨胀加剧。
4.全局统一的处理方法没有体现。
我们可以创建CustomerBlockHandler类用于自定义限流处理逻辑,将所有的限流兜底方法都定义在一起,外面直接引用即可。如下所示:
6.服务熔断
6.1服务熔断只配置fallback
注意:这里的兜底方法返回值和原方法的返回值类型必须一致。
6.2服务熔断只配置blockHandler
注意:如果没有触发sentinel配置规则,但方法内部出现了异常,此处直接会报错,返回给前台error错误信息,对用户不友好。
6.3fallback和blockHandler都配置
各自找各自的,双剑合璧,威力大增。若 blockHandler 和 fallback 都进行了配置,则被限流降级而抛出 BlockException 时只会进入 blockHandler 处理逻辑。
6.4exceptionsToIgnore
表示忽略异常,比如配置了exceptionsToIgnore = {IllegalArgumentException.class},就算配置了fallback兜底方法,如果方法出现了IllegalArgumentException异常,不会走兜底方法,而是直接返回error错误信息。
6.5服务熔断OpenFeign
还是以前的那一套,直接使用即可。
7.规则持久化
像我们之前在Sentinel中配置的规则,如果服务关闭或者重启,其规则都没有了,这样肯定是不行的,所以我们可以把规则配置到Nacos中,让Sentinel去和Nacos共享,这样就达到了服务的匹配规则持久化。
-
resource:资源名称;
-
limitApp:来源应用;
-
grade:阈值类型,0表示线程数,1表示QPS;
-
count:单机阈值;
-
strategy:流控模式,0表示直接,1表示关联,2表示链路;
-
controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;
-
clusterMode:是否集群
8.Hystrix和Sentinel比较
Hystrix和Sentinel都是用于服务容错的组件,但是Sentinel相比于Hystrix更加的强大。
-
对于熔断降级:Hystrix是基于异常比率,而Sentinel有平均响应时间、异常比率、异常数。
-
对于流控效果:Hystrix不支持,而Sentinel有快速失败、预热、排队等待。
-
对于控制台:Hystrix只是简单的监控查看,而Sentinel控制台操作简单,可进行多种配置。
相关文章:

SpringCloudAlibaba——Sentinel
Sentinel也就是我们之前的Hystrix,而且比Hystrix功能更加的强大。Sentinel是分布式系统的流量防卫兵,以流量为切入点,从流量控制、流量路由、熔断降级等多个维度保护服务的稳定性。 Sentinel采用的是懒加载,这个接口被访问一次&a…...
Java编写简易rabbitmq生产者与消费者
一、前言 开发时经常与其它系统用rabbitmq对接,当需要自测时,还是自己写rabbitmq生产者、消费者自测方便些。 下面总结下不用框架、使用java编写简易rabbitmq的方法。 二、代码 1.导入jar包 (1)如果是maven,那就用 <dependency>&…...
3.0.3版vsftpd所支持的FTP命令
2023年11月9日,周四下午 ABOR:中止当前的数据连接。ACCT:提供用户帐户信息,通常用于特定的站点访问控制。ALLO:为服务器上的文件分配存储空间。APPE:将数据添加到现有的远程文件中。CDUP:将当前…...

OTA包添加自定义内容
起因 新开一条线,需要上传的OTA包里加点内容,好让后台校验它是否是当前这条线(短期最小改动)。 开整 之前看过ota包结构,整包和差分包里都有一个payload_properties.txt文件,所以最简单的就是给这个txt文件里追加点自定义内容&…...

Luatos Air700 改变BL0942串口波特率
LuatOs 改变模块串口波特率思路参照 luatos 改变AIR530串口波特率 BL0942默认串口波特率可以通过SCLK_BPS引脚接3.3V电源设置到9600bps 但如果调整到38400bps需要修改0x19寄存器 bl0942 v1.06版的特殊寄存器说明,注意早期版本特殊寄存器说明存在错误 完整代码 mai…...

不可忽视的国外服务器地址IP选择指南
在如今互联网高速发展的时代,海外服务器扮演着重要的角色。选择合适的国外服务器IP地址却是一项复杂而又关键的任务。本文将为您介绍一些不可忽视的国外服务器地址IP选择指南。 私有IP地址: 私有IP地址是指在局域网内使用的IP地址,用于…...

C语言 预处理详解
目录 1.预定义符号 2.#define 2.1#define 定义标识符 2.2#define 定义宏 2.3#define 替换规则 2.4#和## 2.4.1# 的作用 2.4.2## 的作用 2.5 带有副作用的宏参数 2.6宏和函数的对比 对比 **2.7内联函数 2.8命名约定 3.#undef **4.命令行定义 5.条件编译 常…...
c++ async 使用详解,创建异步任务的多种方法
c async 使用详解 std::async 头文件 #include <future>。 函数原型: template<class Function, class... Args> std::future<std::invoke_result_t<std::decay_t<Function>,std::decay_t<Args>...>>async(std::launch polic…...

万物皆数——用matlab求解二阶微分方程
一、背景 毕达哥拉斯的“万物皆数”哲学观点表达了一个理念,即宇宙万物都可以通过数学语言来描述,数是万物的本原。 勾股定理就是毕达哥拉斯提出,因此在西方勾股定理也被叫做毕达哥拉斯定理。 工科类的专业,越到后面越感觉到数学…...

jmeter接口自动化部署jenkins教程
首先,保证本地安装并部署了jenkins,jmeter,xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc ---注意:原理是,jmeter自生成的报告jtl文件,通过xslproc工具,再结合jmeter自带的模板修改&…...

前端js实现将数组对象组装成自己需要的属性,或者去掉对象中不必要的属性
前言 提示:这里可以添加本文要记录的大概内容: 需求:前端js实现将数组对象组装成自己需要的属性,或者前端js实现去掉对象中不必要的属性 提示:以下是本篇文章正文内容,下面案例可供参考 一、示例数组对象…...

MeterSphere 任意文件读取漏洞(CVE-2023-25814)
MeterSphere 任意文件读取漏洞(CVE-2023-25814) 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: title"MeterSphere" 漏洞复现1. 构造poc2. 发送数据包3. 查看文件 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地…...
设计模式-01-单例设计模式
经典的设计模式有23种,但是常用的设计模式一般情况下不会到一半,我们就针对一些常用的设计模式进行一些详细的讲解和分析,方便大家更加容易理解和使用设计模式。 1-为什么要使用单例 单例设计模式(Singleton Design Pattern&…...

霍尔电流传感器如何进行可靠性测试?主要应用在哪些领域?
霍尔电流传感器广泛应用于航空航天、电源监测、飞行器状态监测、变速驱动设备、焊接设备供电电源、新能源汽车蓄电池管理系统等领域,在电流检测领域中有着重要地位和实用价值,在电驱系统中被称为新能源汽车的动力“心脏”。因此,霍尔电流传感…...
pandas按行按列遍历Dataframe的三种方式
遍历数据有以下三种方法: 简单对上面三种方法进行说明: iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。 itertuples(): 按行遍历,将DataFrame的每一行迭代为元…...
Api接口如何防止被刷?
现在越来越多的应用程序和服务都提供了API接口,使得开发人员可以方便地与这些应用程序和服务进行交互。但是,由于API接口是公开的,因此很容易被黑客利用,对系统造成损害。为了确保API接口的安全性,我们需要采取一些措施…...

Django——orm模块创建表关系
django orm中如何创建表关系 1. 表关系分析 表与表之间的关系: 一对多 多对多 一对一 没有关系 判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…...
Django知识点
目录 一、三板斧的使用 二、全局配置文件 三、静态文件的设置 四、request对象的方法 五、pycharm链接数据库 六、Django链接数据库 七、orm介绍 一、三板斧的使用 三个方法: HttpResponse renderredirect def index(request):print(request)return HttpR…...

基于单片机设计的智能风扇(红外线无线控制开关调速定时)
一、项目介绍 在炎热的夏季,风扇成为人们室内生活中必不可少的电器产品。然而,传统的风扇控制方式存在一些不便之处,比如需要手动操作开关、无法远程控制和调速,以及缺乏定时功能等。为了解决这些问题,设计了一款基于…...
k8s报错pause 3.2 解决方案
报错 Failed to create pod sandbox: rpc error: code Unknown desc failed to get sandbox image "k8s.gcr.io/pause:3.2": failed to pull image "k8s.gcr.io/pause:3.2": failed to pull and unpack image "k8s.gcr.io/pause:3.2": failed…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...