Sentinel-线程隔离和熔断降级

news2024/11/25 5:00:08

一、线程隔离

 ​​​​

 

总结

  • 线程隔离的两种手段是?
    • 信号量隔离
    • 线程池隔离
  • 信号量隔离的特点是?
    • 基于计数器模式,简单,开销小
  • 线程池隔离的特点是?
    • 基于线程池模式,有额外开销,但隔离控制更强

二、熔断降级

​        Sentinel如何来去实现熔断降级?融合降级,它其实就是用一个断路器去统计服务调用时的一个异常比例、慢请求比例,如果说在做服务调用的时候,异常的比例过高,触发了阈值,就会熔断该服务,拦截访问该服务的一切请求。那这样呢,就会把这个故障服务隔离开了,不会让它影响到我们正常的服务。(就像古代啊,这个武侠人士是吧,这手被毒蛇咬了,赶紧手起刀落,把这个手砍掉,那脚还中毒了呢,卡,把脚砍掉,防止这个毒扩散到全身啊。所以壮士断腕就是一种自我保护)。当然,你把手砍了不算本事啊,你要是能接回来才算本事。所以呢,服务熔断很好做,将来服务如果恢复了,还应该去恢复对该服务的访问。那这个我们的断路器怎么去做呢?

​        它是由内部的一个状态机来实现的,这个状态机,包含三个状态,分别是Close、Open、Half-Open。Open绿色代表走,这种状态下,断路器不会拦截任何请求,不管请求是正常的还是异常的,都可以访问,但是我们的断路器会统计这个调用的异常比例,如果统计过程中发现异常的比例过高,达到了阈值,它就会从Closed状态切换到Open状态,红色代表停止,那这个时候他就会拦截进入该服务的一些请求了,也就相当于是垄断,但是你不能一直是垄断状态(因为万一这个服务它又恢复了),那因此我们这个熔断的状态会有一个持续的时间,当这个熔断时间结束时,它会从Open状态切换到Half-Open状态,在这个状态下它会放行一次请求,然后根据这次请求的结果来判断接下来干嘛,比如说Half-Open放行了一次请求,结果发现这个请求依然是失败的,那会再次进入Open状态,拦截一切请求,进入熔断,当然同样是持续一段熔断时间,然后再进入Half-Open,那如果放行的这个请求它执行完了,发现是成功的,那么就会从Half-Open切换到Cloesd,这个时候,就等于我们的登录器又开始放行了,那大家随便,然后又开始做数据统计了。那么这三个状态啊,就可以按照这种方式进行一个切换,因此呢,我们不仅能够熔断,还能恢复,就是靠这个来实现的。那在这里面啊,比较关键的两个东西。第一,就是熔断的持续时间(这个将来肯定有我们去配置),第二,失败的阈值,什么情况下你要去熔断。而这个达成熔断的条件啊,在Sentinel里面就叫做熔断的策略。

 

熔断策略

熔断策略到底有哪些呢?

断路器熔断策略有三种:慢调用、异常比例、异常数

慢调用

慢调用:业务的响应时长(RT)大于指定时长的请求认定为慢调用请求。在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定的阈值,则触发熔断。例如:

上面降级规则配置的解读:RT超过500ms的调用是慢调用,统计最近10000ms内的请求,如果请求量超过10次,并且慢调用比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。

案例

 异常比例、异常数

总结

Sentinel熔断降级的策略有哪些?

  • 慢调用比例:超过指定时长的调用为慢调用,统计单位时长内慢调用的比例,超过阈值则熔断

  • 异常比例:统计单位时长内异常调用的比例,超过阈值则熔断

  • 异常数:统计单位时长内异常调用的次数,超过阈值则熔断

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

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

相关文章

为什么在容器中 1 号进程挂不上 arthas?

作者:卜比 本文是《容器中的 Java》系列文章之 4/n ,欢迎关注后续连载 😃 。 系列1:JVM 如何获取当前容器的资源限制? 系列2:Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题 系列3:让…

FPGA纯verilog代码实现图像对数变换,提供工程源码和技术支持

目录1、图像对数变换理论2、log系数的matlab生成3、FPGA实现图像对数变换4、vivado与matlab联合仿真5、vivado工程介绍6、上板调试验证并演示7、福利:工程代码的获取1、图像对数变换理论 对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细…

解决报错: ERR! code 128npm ERR! An unknown git error occurred

在github下载的项目运行时,进行npm install安装依赖时,出现如下错误:npm ERR! code 128npm ERR! An unknown git error occurrednpm ERR! command git --no-replace-objects ls-remote ssh://gitgithub.com/nhn/raphael.gitnpm ERR! gitgithu…

展锐UDX710:ProSLIC SI32185移植适配(未完待续)

一、SLIC基本流程图 在展锐UDX710平台上新增slic 驱动,可将应用代码置于source/unisoc/atrouter2.0下面,Si32185驱动代码放置于kernel,通过IOCTL对slic器件进行控制。整体流程如下图所示: 二、ProSLIC SI32185驱动调试 1. DTS 控制通路SPI0需增加一个spidev用于绑定对…

SpringCloud学习笔记03

目录 四十七、Hystrix是什么 四十八、Hystrix停更进维 四十九、Hystrix的服务降级熔断限流概念初讲 五十、Hystrix支付微服务构建 五十一、JMeter高并发压测后卡顿 五十二、订单微服务调用支付服务出现卡顿 五十三、降级容错解决的维度要求 五十四、Hystrix之服务降级支…

ReentrantReadWriteLock、StampedLock

ReentrantLock、ReentrantReadWriteLock、StampedLock 读写锁 一个资源可以被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。 小口诀:读写互斥,读读共享 锁的演变 无锁-----> 独占锁----->读写锁---…

为什么各个企业都在创建FAQ、常见问题页面?

常见问题解答页面是您可能已经为您的公司考虑过的东西,作为帮助客户回答有关您的产品和服务的常见问题的一种方式。但是您不知道最好的方法;肯定这只是一个问题清单吗?常见问题解答在整个购买过程中为客户提供支持,并减少客户需要与贵公司的联…

服务异步通信 RabbitMQ-高级篇

服务异步通信RabbitMQ-高级篇服务异步通信RabbitMQ-高级篇1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认1.3.1.演示none模式1.3.2.演示aut…

Spring Data JPA和MyBatisPlus比较以及SpringBoot整合

文章目录一.基本概念二.SpringBoot JPA整合hibernate -yml配置三.SpringBoot整合MyBatisPlus一.基本概念 Spring Data JPA作用:面向对象的ORM全自动化框架,简化持久化操作的开发工作:让开发者从繁琐的JDBC和SQL代码中解脱出来,直接面向对象持久化操作.特点:跨数据库…

Elasticsearch:在搜索中使用衰减函数(Gauss)

在我之前的文章 “Elasticsearch:使用 function_score 及 script_score 定制搜索结果的分数” 我有讲到 Decay 函数在搜索中的使用。在那里,我有一个例子讲述在规定的时间里,分数不进行衰减。同一的函数也可以适用于地理位置的搜索。位置搜索…

C++原子变量atomic详解

C原子变量atomic详解一、简介二、成员函数2.1、构造函数2.2、is_lock_free函数2.3、store函数2.4、load函数2.5、exchange函数2.6、compare_exchange_weak函数2.7、compare_exchange_strong函数2.8、专业化支持的操作三、使用示例总结一、简介 原子类型的对象包含特定type ()的…

分享5个超好用的Vue.js库

开发人员最好的朋友和救星就是这些第三方库,无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包。借助开源库加速Vue项目的开发进度是现代前端开发比较常见的方式,这几个 Vue.js库,建议尽早用上,加速你的项目开发…

集合(Set、Collections、Map、集合嵌套)

目录 Set系列集合 Set系列集合概述 HashSet元素无序的底层原理:哈希表 HashSet元素去重复的底层原理 实现类:LinkedHashSet 实现类:TreeSet Collection体系的特点、使用场景总结 补充知识:可变参数 补充知识:集…

自动化测试实战篇(7)jmeter连接mysql数据库,实现单表、多表、三表查询,并对表中数据进行修改,删除,新增操作

Jmeter也可以连接mysql数据库,通过JDBC去调用数据库内的参数到HTTP请求中进行接口测试,可以说是相当方便 自动化测试实战篇(7)jmeter连接mysql数据库,实现单表、多表、三表查询,并对表中数据进行修改&#…

多线程带来的的风险-线程安全

❣️关注专栏:: JavaEE 这篇文章将为大家描述线程安全问题的原因和解决方案。线程安全是多线程编程中最难的地方,也是重要的地方,还是一个最容易出错的地方,也是面试中容易考的要点,同样也是我们以后工作中经常爱出错的…

【软件测试】8年资深测试总结出的测试学习经验,从入门到测试开发......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试圈子里有一句话…

Python语言零基础入门教程(九)

Python pass 语句 Python pass 是空语句,是为了保持程序结构的完整性。 pass 不做任何事情,一般用做占位语句。 Python 语言 pass 语句语法格式如下: pass测试实例: #!/usr/bin/python # -*- coding: UTF-8 -*- # 输出 Pytho…

Caused by: java.sql.SQLException: ORA-28040: 没有匹配的验证协议

更改Oracle的配置文件:Oracle -> app -> ... ->...dbhome... -> admin重启Oracle:重启Oracle数据库的操作步骤1.查看监听器状态:lsnrctl status2.停止监听器:lsnrctl stop3.连接数据库:sqlplus / as sysdba4.停止数据…

怡合达业务大规模容器化最佳实践

作者:肖念康,东莞怡合达智能制造供应链资深 Java 开发工程师,主要负责公司内部 DevOps、代码托管平台、任务需求管理平台的研发及其他项目的管理,云原生的研究与开发工作。 公司简介 怡合达致力于自动化零部件研发、生产和销售&am…

[C++] -- 模板初阶

文章目录函数模板函数模板的隐式实例化显式实例化模板参数的匹配原则类模板模板函数声明和定义分离会链接错误函数模板 对于一些参数不同但功能类似的函数,C有函数重载,但是函数重载有一些缺陷: 重载的函数只是参数不同,代码复用…