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

Sentinel限流、熔断

1、限流

单个服务节点限流

        sentinel 提供了两种不同的隔离机制:信号量隔离和线程池隔离,它们的主要区别如下:

  1. 信号量隔离(Semaphore Isolation)

    • 原理:信号量隔离基于计数器(或称令牌桶)的概念。对某个资源设置一个并发访问的最大数量(信号量大小),当请求到达时,如果当前信号量未达到上限,则分配一个信号量并允许请求通过;否则拒绝请求。
    • 特点:信号量隔离不使用额外的线程池来处理请求,因此在高并发场景下能够减少线程切换开销,提高系统性能。但信号量隔离不阻塞请求,超过阈值的请求直接被拒绝,不会等待。
  2. 线程池隔离(Thread Pool Isolation)

    • 原理:线程池隔离为每个受保护的资源分配一个独立的线程池,只有当线程池中有空闲线程时,新的请求才能执行。线程池的大小可以配置,超出线程池容量的请求会被放入队列中等待,若队列也满,则请求会被拒绝。
    • 特点:线程池隔离提供了更强的隔离效果,确保资源在一个可控的线程环境中执行,避免因大量并发请求导致的资源耗尽问题。但相比于信号量隔离,线程池隔离可能会引入更多的线程上下文切换成本,并且需要管理线程生命周期。

        总结来说,信号量隔离侧重于快速地限制并发请求数量,适用于轻量级服务或者对响应速度要求较高的场景;而线程池隔离则适合于资源密集型操作,它可以更有效地控制资源内部的状态,并防止由于过多并发而导致的服务雪崩效应。在 Sentinel 中,默认采用的是信号量隔离策略,但同时也支持配置为线程池隔离以满足特定需求。

        Sentinel 中的信号量隔离和线程池隔离机制都是针对单个服务节点进行资源保护的限流策略。它们主要用于控制单机上的并发请求量或资源消耗,确保在该服务节点层面不会因并发过高而导致系统过载。

集群限流

        对于分布式场景下的集群限流,虽然 Sentinel 提供了规则的集中式管理和配置推送(通过接入配置中心如 Nacos、Apollo 等),但信号量隔离和线程池隔离的具体执行仍然是在各个独立的服务节点上完成的,并非直接实现跨多个服务节点的总限流。要实现全局一致的限流效果,通常需要结合负载均衡器策略以及服务内部的协调机制来共同达成目标。

2、熔断

官方文档:circuit-breaking | Sentinel

熔断

        Sentinel 熔断(Circuit Breaker)是阿里巴巴开源的分布式系统的流量控制组件中的一种重要策略。它借鉴了电路熔断器的工作原理,当某个服务调用出现不稳定或者异常时,可以快速地阻止对这个服务的连续请求,防止故障扩散和雪崩效应。

        在 Sentinel 中,熔断机制具有以下关键特性:

  1. 状态管理

    • CLOSED(关闭状态):正常运行,所有请求都会被处理。
    • OPEN(打开状态):熔断器触发后进入此状态,不再允许通过任何请求,并且直接返回降级响应或抛出异常。此时,会记录熔断状态并持续一段时间(熔断时间窗口)。
    • HALF-OPEN(半开状态):熔断时间窗口过后,熔断器会进入半开状态,开始尝试放行部分请求以检查目标服务是否已经恢复。如果成功则认为服务恢复,关闭熔断器;若继续失败,则重新转为 OPEN 状态。
  2. 熔断规则

    • 可配置多种熔断触发条件,如基于错误比例、异常数、响应时间等指标。
    • 用户可以根据需要自定义熔断后的降级逻辑,例如返回默认值、缓存数据或者执行其他备选逻辑。
  3. 实时监控与动态调整

    • Sentinel 提供了实时监控功能,能够直观地查看资源的健康状况、请求成功率以及熔断开关的状态变化。
    • 配置的熔断阈值可以动态调整,根据实际业务需求和系统负载情况灵活变更熔断策略。

        总之,Sentinel 的熔断机制旨在通过自动切断不稳定的依赖关系,保护整个微服务架构不受局部故障影响,从而提高系统的整体可用性和稳定性。

状态转换

        Sentinel 的熔断器(Circuit Breaker)在以下情况下会进行状态转换:

  1. 关闭(CLOSED)状态到开启(OPEN)状态

    • 当 Sentinel 检测到某个资源在设定的时间窗口内,失败次数或错误比例达到预设阈值时,熔断器将从关闭状态切换到开启状态。
    • 例如,如果配置的是当请求错误率达到50%并且连续10次请求失败,则熔断器将会打开。
  2. 开启(OPEN)状态到半开(HALF-OPEN)状态

    • 开启状态持续一段时间后(这个时间称为“休眠时间”或者“恢复时间窗口”),熔断器会自动进入半开状态。
    • 在半开状态下,允许一定数量的请求通过去尝试调用后端服务,以探测服务是否已经恢复正常。
  3. 半开(HALF-OPEN)状态到关闭(CLOSED)状态

    • 如果在半开状态下,成功处理了若干个试探请求(通常设置为一个较小的数量,如1个或几个),则认为该服务已恢复稳定,此时熔断器会转回关闭状态,继续正常处理所有请求。
    • 若在半开状态下,在给定的试探请求中又有部分请求失败,则熔断器会判断可能服务还未完全恢复,因此再次转为开启状态,重新开始计时等待下一次半开检测的机会。

        总结来说,Sentinel 熔断器的状态变化是基于实际运行时的健康检查和预定义的规则来进行的,其目的是快速隔离故障服务,同时也能在服务恢复后及时恢复对它的正常访问。

3、官方文档

introduction | Sentinel

相关文章:

  • Codeforces Round 768 (Div. 1) D. Flipping Range(思维题 等价类性质 dp)
  • javacv和opencv对图文视频编辑-常见错误汇总
  • C++学习笔记——SLT六大组件及头文件
  • Java项目:117SpringBoot动漫论坛网站
  • 前端随机验证码安全验证sdk
  • 【EMC专题】浪涌的成因与ICE 61000-4-5标准
  • 训练AI模型:寻找最优参数a和b
  • stm32学习笔记:USART串口通信
  • Day02
  • 远程登陆利器 ssh
  • C# 静态代码织入AOP组件之肉夹馍
  • 剑指offer面试题5 从尾到头打印链表
  • 第二百六十六回
  • Nano文本编辑器:轻松入门,简单实用(适用于Linux)
  • Win系统搭建Elasticsearch实现公网远程访问本地服务
  • exports和module.exports
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • MySQL用户中的%到底包不包括localhost?
  • Promise初体验
  • Python socket服务器端、客户端传送信息
  • python 装饰器(一)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • session共享问题解决方案
  • Webpack 4 学习01(基础配置)
  • 从setTimeout-setInterval看JS线程
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 关于使用markdown的方法(引自CSDN教程)
  • 前端面试之CSS3新特性
  • 前嗅ForeSpider教程:创建模板
  • 嵌入式文件系统
  • 学习HTTP相关知识笔记
  • 异步
  • 译自由幺半群
  • 责任链模式的两种实现
  • 追踪解析 FutureTask 源码
  • 自动记录MySQL慢查询快照脚本
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Matlab)使用竞争神经网络实现数据聚类
  • (pytorch进阶之路)扩散概率模型
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (论文阅读30/100)Convolutional Pose Machines
  • (转)linux自定义开机启动服务和chkconfig使用方法