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控制台操作简单,可进行多种配置。

 

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

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

相关文章

react 实现chatGPT的打印机效果 兼容富文本,附git地址

1、方式一 :使用插件 typed.js typed.js 网站地址,点我打开 1.1、核心代码如下: //TypeWriteEffect/index.tsx 组件 import React, { useEffect, useRef } from react; import Typed from typed.js; import { PropsType } from ./index.d;…

算法进阶指南图论 道路与航线

其实再次看这题的时候。想法就是和强连通分量有关,我们很容易发现,题目中所说的双向边,就构成了一个强连通分量,而所谓的单向边,则相当于把强连通分量进行缩点,然后整个图成为了一个DAG,众所周知…

MongoDB副本集特点验证

MongoDB副本集特点验证 mogodb副本集概述副本集搭建副本集结构验证结果源码地址 mogodb副本集概述 MongoDB副本集是将数据同步在多个服务器的过程。 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证…

2022ICPC济南站

K Stack Sort 题意:给你一个长度为n的排列,设有m个栈,你需要将这n个数按出现顺序入栈,每次入栈操作从m个栈中选择一个栈从栈顶入栈。当所有元素入栈完成后,需要不断选择栈,将栈中元素弹空。需满足出栈顺序…

【不正经操作】百度深度学习框架paddlepaddle本地运行-Python环境配置笔记

百度深度学习框架PaddlePaddle 百度深度学习框架PaddlePaddle是一个支持深度学习和机器学习的开源框架。它由百度公司于2016年开发并发布,现在已经成为中国最受欢迎的深度学习框架之一,并且在国际上也获得了不少关注。 特点与功能 易于使用 PaddlePa…

ARMday01(计算机理论、ARM理论)

计算机理论 计算机组成 输入设备、输出设备、运算器、控制器、存储器 1.输入设备:将编写好的软件代码以及相关的数据输送到计算机中,转换成计算机能够识别、处理和存储的数据形式 键盘、鼠标、手柄、扫描仪、 2.输出设备:将计算机处理好的数…

解决 github.com 或者 raw.githubusercontent.com 打开慢、打不开问题

系列文章目录 文章目录 系列文章目录前言一、Windows 系统1.1 以管理员身份运行记事本1.2 打开 hosts 文件1.3 写入 IP 地址 二、Linux2.1 hosts 文件位置 三、Android 系统总结 前言 连接手机热点,将流量关闭马上打开,进入的成功率更高 一、Windows 系…

Netty入门指南之NIO 粘包与半包

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言问题产…

深度学习读取txt训练数据绘制参数曲线图的方法

有一些深度学习模型是并不像yolo系列那样最终输出相应的参数图,有很多训练形成了一个训练log文件,于是需要读取log文件中的内容并绘制成曲线图。 如下实例,有一个log文件的部分截图,需要将其读取出来并绘制曲线图 废话不多说&…

前端之Bootstrap框架

目录 【一】Bootstrap介绍 【二】Bootstrap引入 【1】CDN加速链接 【2】注意 【三】布局容器 【四】栅格系统 【五】栅格参数 【六】列偏移 【七】排版 标题 内联文本元素 对齐 改变大小写 引用 列表 【八】表格 基本实例 条纹状表格 带边框的表格 鼠标悬停…

汽车工业生产线数字孪生可视化管理平台,赋予工厂车间数字化智慧化管理

在工业4.0 的时代背景下,随着企业数字化进程的推进,数字孪生可视化技术逐渐在汽车行业得到广泛应用,数字孪生智慧工厂的建设也成为了汽车行业数字化转型的趋势之一。汽车制造业属于典型的离散制造行业,汽车生产包含冲压、焊接、涂…

19.13 Boost Asio 发送TCP流数据

Boost框架中默认就提供了针对TCP流传输的支持,该功能可以用来进行基于文本协议的通信,也可以用来实现自定义的协议。一般tcp::iostream会阻塞当前线程,直到IO操作完成。 首先来看服务端代码,如下所示在代码中首先通过GetFileSize…

C++的Odyssey之旅——STL

W...Y的主页 😊 代码仓库分享💕 🍔前言:我们已经将基本语法了解的差不多了,现在我们就该进入C中最重要也是最富有特点的一部分——STL。在学习C语言中我们想要使用顺序表、链表等一些数据结构进行做题时都需要进行这…

Go invalid memory address or nil pointer dereference错误 空指针问题

Go 指针声明后赋值,出现 panic: runtime error: invalid memory address or nil pointer dereference,这种是内存地址错误。 首先我们要了解指针,指针地址在 Go 中 * 代表取指针地址中存的值,& 代表取一个值的地址对于指针&am…

WordPress主题 JustNews主题6.0.1(亲测首页不空白)

介绍 资源入口 需要用WordPress5.X版本 JustNews介绍:一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题,自v3.0版开始支持自主研发的前端用户中心,不仅支持注册、登录、账户设置、个人中心等常用页面的添加,还可以上传…

【原创】java+jsp+servlet简单图书管理系统设计与实现

摘要: 图书管理系统是一个专门针对图书馆管理而设计的系统,它可以帮助图书管理员有效的对图书进行管理,在图书管理系统的设计中,首先要考虑的是系统的需求分析,该系统的设计与实现涉及多个方面,包括数据库…

【赠书第2期】嵌入式虚拟化技术与应用

文章目录 前言 1 背景概述 2 专家推荐 3 本书适合谁? 4 内容简介 5 书籍目录 6 权威作者团队 7 粉丝福利 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展,虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式…

Linux 入门

Linux 入门 1:linux 用户 root 用户 :也叫超级用户,UID0,其权限最高。系统用户:也叫虚拟用户,UID 1-999普通用户: UID1000-60000, 可以登录系统,操作自己目录下的文件. 1.1:用户操作命令 切换用户: su …

ts面试题总结

文章目录 前言ts和js的区别?什么是Typescript的方法重载?Typescript中never 和 void 的区别?typescript 中的 is 关键字有什么用?TypeScript支持的访问修饰符有哪些?如何定义一个数组,它的元素可能是字符串…

【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除!

文章目录 前言XML映射文件方式推荐使用主键删除注解方式工具类前言 在实际开发中,我们经常需要删除数据库中的数据,MyBatis可以使用XML映射文件或注解来编写删除(delete)语句,下面是两种方法的示例。 XML映射文件方式 Mapper: int delete(int id);Mapper.xml: