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.hqwc.cn/news/168610.html

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

相关文章

C语言----静态链接库和动态链接库

在前面的文章中讲到可执行程序的生成需要经过预处理,编译,汇编和链接四个步骤,链接阶段是链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。 需要解读一下库文件,我们可以将库文件等价为压缩包文件&…

基于springboot+vue的校园闲置物品交易系统

运行环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven 项目介绍 本文从管…

Kafka中遇到的错误:

1、原因:kafka是一个去中心化结果的,所以在启动Kafka的时候,每一个节点上都需要启动。 启动的命令:kafka-server-start.sh -daemon /usr/local/soft/kafka_2.11-1.0.0/config/server.properties

AI时代产品经理升级之道:ChatGPT让产品经理插上翅膀

文章目录 一、ChatGPT简介二、ChatGPT在产品经理工作中的应用1. 快速获取用户反馈2. 智能分析竞品3. 智能推荐产品4.分析市场趋势5.优化产品功能 三、总结与展望《AI时代产品经理升级之道:ChatGPT让产品经理插上翅膀》亮点内容简介目录作者简介获取方式 随着人工智能…

Windows系统安装2个版本得的MySQL

一、MySQL官网下载对应版本的zip文件 最新版本8.0.34下载链接:https://dev.mysql.com/downloads/mysql/ MySQL 5.7下载链接:https://downloads.mysql.com/archives/community/ 二、将下载到的压缩包解压到指定目录 使用解压工具将下载到的压缩包解…

设计模式之中介者模式

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概5000多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…

设计模式JAVA

1 创建型 如何合理的创建对象? 1.1 单例模式 字面意思就是只能创建一个对象实例时使用。 例如,Windows中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等…

Java学习 10.Java-数组习题

一、创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100 代码实现 public static void main(String[] args) {int[] arrnew int[100];for (int i 0; i < arr.length; i) {arr[i]i1;}System.out.println(Arrays.toString(arr));} 运行结果 二、改变…

k8s-docker二进制(1.28)的搭建

二进制文件-docker方式 1、准备的服务器 角色ip组件k8s-master1192.168.11.111kube-apiserver,kube-controller-manager,kube-scheduler,etcdk8s-master2192.168.11.112kube-apiserver,kube-controller-manager,kube-scheduler,etcdk8s-node1192.168.11.113kubelet,kube-prox…

相机内外参实践之点云投影矢量图

目录 概述 涉及到的坐标变换 深度值可视化 3D点云的2D投影实现 实现效果 参考文献 概述 Camer的内外参在多模态融合中主要涉及到坐标系变换&#xff0c;即像素坐标、相机坐标以及其他坐标系。这篇就针对点云到图像的投影与反投影做代码实践&#xff0c;来构建一张具有深度…

【从0到1设计一个网关】上岸大厂的秘诀之一

文章目录 前言【从0到1设计一个网关】什么是网关&#xff1f;以及为什么需要自研网关&#xff1f;【从0到1设计一个网关】自研网关的设计要点以及架构设计【从0到1设计一个网关】自研网关的架构搭建【从0到1设计一个网关】网络通信框架Netty的设计【从0到1设计一个网关】整合Na…

LeetCode(2)移除元素【数组/字符串】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 27. 移除元素 1.题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原…