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

利用Sentinel解决雪崩问题(二)隔离和降级

前言:

       虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。而要将这些故障控制在一定范围避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了,不管是线程隔离还是熔断降级,都是对客户端(调用方)的保护。

一、FeignClient整合Sentinel

Feign整合Sentinel的步骤:

1、在application.yml中配置:feign.sentienl.enable=true

feign:httpclient:enabled: true # 支持HttpClient的开关max-connections: 200 # 最大连接数max-connections-per-route: 50 # 单个路径的最大连接数sentinel:enabled: true # 开启了feign对sentinel的支持

2、给FeignClient编写FallbackFactory并注册为Bean

@Slf4j
public class UserClientFallbackFactory implements FallbackFactory<UserClient> {@Overridepublic UserClient create(Throwable throwable) {return new UserClient() {@Overridepublic User findById(Long id) {log.info("查询用户异常",throwable);return new User();}};}
}

3、将FallbackFactory配置到FeignClient

@FeignClient(value = "userservice",fallbackFactory = UserClientFallbackFactory.class)
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}

二、线程隔离(舱壁模式)

在Sentinel中,线程池隔离和信号量隔离都是用于保护应用程序免受外部资源访问过载的影响,但它们之间有一些关键区别:

  1. 线程池隔离(Thread Pool Isolation)

    • 线程池隔离通过为每个资源调用分配一个独立的线程池来实现隔离。每个资源调用都在自己的线程池中执行,因此当一个资源调用出现问题时,它不会影响到其他资源调用,提高了系统的稳定性。
    • 每个线程池都有自己的线程限制、队列大小等配置参数,这些参数可以根据资源的特性和负载情况进行调整。
  2. 信号量隔离(Semaphore Isolation)

    • 信号量隔离通过为每个资源调用分配一个信号量来实现隔离。当资源调用达到指定的并发访问限制时,新的资源调用将被限制或阻塞,直到有可用的资源许可为止。
    • 信号量隔离更适用于对资源的并发访问进行限制的场景,而不是将资源调用隔离到不同的线程池中。

关键区别:

  • 资源隔离级别: 线程池隔离将资源调用隔离到不同的线程池中,而信号量隔离则将资源调用隔离到并发访问受限的信号量中。
  • 资源分配方式: 线程池隔离使用线程池来执行资源调用,而信号量隔离使用信号量来限制资源的并发访问。
  • 适用场景: 线程池隔离更适用于需要将资源调用完全隔离开的场景,而信号量隔离更适用于需要限制资源的并发访问的场景。


三、熔断降级

       熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例、慢请求比例,如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求;而当服务恢复时,断路器会放行访问该服务的请求。

3.1、 熔断降级的策略:

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

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

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


3.2.2异常比例或异常数:统计指定时间内的调用,如果调用次数超过指定请求数,并且出现异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔断。例如:

解读:统计最近1000ms内的请求,如果请求量超过10次,并且异常比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。


3.3、总结:

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

  1. 慢调用比例:超过指定时长的调用为慢调用,统计单位时长内慢调用的比例,超过阈值则熔断
  2. 异常比例:统计单位时长内异常调用的比例,超过阈值则熔断
  3. 异常数:统计单位时长内异常调用的次数,超过闽值则熔断
http://www.lryc.cn/news/338732.html

相关文章:

  • 基于springboot的房产销售系统源码数据库
  • 【MATLAB】基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据(附代码)
  • 深圳晶彩智能ESP32-3248S035R使用LovyanGFX实现手写板
  • 【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
  • ISTQB选择国内版,还是国际版呢
  • 头歌-机器学习 第11次实验 softmax回归
  • Qt for MCUs 2.7正式发布
  • 共享IP和独享IP如何选择,两者有何区别?
  • 文心一言VSchatGPT4
  • Linux 目录结构与基础查看命令
  • 【matlab】如何解决打开缓慢问题(如何让matlab在十几秒内打开)
  • 【stata】求滚动波动情况
  • The C programming language (second edition,KR) exercise(CHAPTER 2)
  • rust实现循环链表
  • 2. Spring的创建和Bean的存取
  • 策略模式【行为模式C++】
  • php中session相关知识(目前了解部分)
  • 从零实现诗词GPT大模型:GPT是怎么生成内容的?
  • 8路HDMI+8路AV高清视频流媒体编码器JR-3218HD
  • LangChain入门:14.LLMChain:最简单的链的使用
  • 深入理解k8s kube-proxy
  • Spark-机器学习(1)什么是机器学习与MLlib算法库的认识
  • java的正则表达式校验,包含了中国几乎所有运营商手机号码的校验格式
  • C#简单工厂模式的实现
  • .NET 设计模式—观察者模式(Observer Pattern)
  • EasyUI Jquery 学习笔记 ——DataGrid(数据网格)与 Tree(树)详细版
  • JAVA发票验真接口、票据ocr、数电票在线查验真伪
  • el-date-picker调用回车事件
  • js学习总结
  • MES实施优势有哪些?MES制造执行系统的主要内容