当前位置: 首页 > news >正文

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对接&#xff0c;当需要自测时&#xff0c;还是自己写rabbitmq生产者、消费者自测方便些。 下面总结下不用框架、使用java编写简易rabbitmq的方法。 二、代码 1.导入jar包 (1)如果是maven&#xff0c;那就用 <dependency>&…...

3.0.3版vsftpd所支持的FTP命令

2023年11月9日&#xff0c;周四下午 ABOR&#xff1a;中止当前的数据连接。ACCT&#xff1a;提供用户帐户信息&#xff0c;通常用于特定的站点访问控制。ALLO&#xff1a;为服务器上的文件分配存储空间。APPE&#xff1a;将数据添加到现有的远程文件中。CDUP&#xff1a;将当前…...

OTA包添加自定义内容

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

Luatos Air700 改变BL0942串口波特率

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

不可忽视的国外服务器地址IP选择指南

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

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>。 函数原型&#xff1a; template<class Function, class... Args> std::future<std::invoke_result_t<std::decay_t<Function>,std::decay_t<Args>...>>async(std::launch polic…...

万物皆数——用matlab求解二阶微分方程

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

jmeter接口自动化部署jenkins教程

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

前端js实现将数组对象组装成自己需要的属性,或者去掉对象中不必要的属性

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

MeterSphere 任意文件读取漏洞(CVE-2023-25814)

MeterSphere 任意文件读取漏洞&#xff08;CVE-2023-25814&#xff09; 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: title"MeterSphere" 漏洞复现1. 构造poc2. 发送数据包3. 查看文件 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地…...

设计模式-01-单例设计模式

经典的设计模式有23种&#xff0c;但是常用的设计模式一般情况下不会到一半&#xff0c;我们就针对一些常用的设计模式进行一些详细的讲解和分析&#xff0c;方便大家更加容易理解和使用设计模式。 1-为什么要使用单例 单例设计模式&#xff08;Singleton Design Pattern&…...

霍尔电流传感器如何进行可靠性测试?主要应用在哪些领域?

霍尔电流传感器广泛应用于航空航天、电源监测、飞行器状态监测、变速驱动设备、焊接设备供电电源、新能源汽车蓄电池管理系统等领域&#xff0c;在电流检测领域中有着重要地位和实用价值&#xff0c;在电驱系统中被称为新能源汽车的动力“心脏”。因此&#xff0c;霍尔电流传感…...

pandas按行按列遍历Dataframe的三种方式

遍历数据有以下三种方法&#xff1a; 简单对上面三种方法进行说明&#xff1a; iterrows(): 按行遍历&#xff0c;将DataFrame的每一行迭代为(index, Series)对&#xff0c;可以通过row[name]对元素进行访问。 itertuples(): 按行遍历&#xff0c;将DataFrame的每一行迭代为元…...

Api接口如何防止被刷?

现在越来越多的应用程序和服务都提供了API接口&#xff0c;使得开发人员可以方便地与这些应用程序和服务进行交互。但是&#xff0c;由于API接口是公开的&#xff0c;因此很容易被黑客利用&#xff0c;对系统造成损害。为了确保API接口的安全性&#xff0c;我们需要采取一些措施…...

Django——orm模块创建表关系

django orm中如何创建表关系 1. 表关系分析 表与表之间的关系: 一对多 多对多 一对一 没有关系 判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…...

Django知识点

目录 一、三板斧的使用 二、全局配置文件 三、静态文件的设置 四、request对象的方法 五、pycharm链接数据库 六、Django链接数据库 七、orm介绍 一、三板斧的使用 三个方法&#xff1a; HttpResponse renderredirect def index(request):print(request)return HttpR…...

基于单片机设计的智能风扇(红外线无线控制开关调速定时)

一、项目介绍 在炎热的夏季&#xff0c;风扇成为人们室内生活中必不可少的电器产品。然而&#xff0c;传统的风扇控制方式存在一些不便之处&#xff0c;比如需要手动操作开关、无法远程控制和调速&#xff0c;以及缺乏定时功能等。为了解决这些问题&#xff0c;设计了一款基于…...

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…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...