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

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

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

相关文章

React Hooks大全—useContext

在本文中,我们将重点介绍useContext这个Hook,它可以让你在函数组件中轻松地访问React Context,从而实现跨组件的状态共享。我们将从基本使用,实现原理,最佳实践,以及一些常见的问题和解决方案来探讨useCont…

域名群站开源系统分享开源域名授权系统

一、需要自己安装PHP和MYSQL服务器环境。 二、务必设置伪静态规则,否则将无法访问文章栏目页面。 三、启用伪静态功能,请在站点设置中选择使用thinkphp的伪静态规则。 四、在域名的根目录下找到”data/config.php”文件,填入数据库的账号和…

C++ 中 static 应用

static 实验介绍 在 C/C++ 中都可以使用 static 关键字,但是却需要注意在 C 与 C++ 的使用方法有差异。C++ 除了继承 C 中 static 的使用方法外还增加了新的使用方法。本次实验主要介绍 static 在 C++ 中的使用方法。 静态的成员在实例化对象之前已经产生,并将数据存放在全…

配置zabbix监控平台

目录 内容纯手敲,难免有误,若发现请私信我。 配置zabbix监控平台 一、进入官网 ​编辑​ 二、配置zabbix-server(服务端) 1.下载zabbix的yum源 2.安装Zabbix服务器、前端、代理 3.安装Zabbix前端 4.编辑文件/etc/yum.rep…

openssl3.2 - quic服务的运行

文章目录 openssl3.2 - quic服务的运行概述笔记运行openssl编译好的quic服务程序todo - 如果自己编译quic服务工程补充 - 超过30秒不连接uqic服务会退出END openssl3.2 - quic服务的运行 概述 在看 官方 guide目录下的工程. 都是客户端程序, 其中有quic客户端, 需要运行quic服…

【算法Hot100系列】旋转图像

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

开发安全之:Cross-Site Scripting (XSS) 漏洞

近期,我会结合研发云陆续发布开发安全相关的文章,欢迎大家关注! Overview echo json_encode($arr):向一个 Web 浏览器发送了未验证的数据,从而导致该浏览器执行恶意代码。 Details Cross-Site Scripting (XSS) 漏洞…

软件测试|python如何去除文件后缀名?

简介 在Python中,我们常常需要操作文件,包括文件的读取、写入、重命名等操作。在文件操作中,我们经常会遇到需要去除文件后缀的问题。那么,Python如何去除文件后缀呢?本文我们将介绍如何使用Python来去除文件后缀。 …

大模型学习与实践笔记(六)

一、finetune 简介 两种微调模式:增量预训练 与指令跟随 1.增量预训练 2.指令微调 二、LoRA 与 QLoRA 介绍 三、XTuner 介绍 四、低显存玩转LLM的方法

Spring Boot整理-Spring Boot的优势

Spring Boot 提供了多个显著的优势,特别是对于快速开发和简化 Spring 应用的配置和部署。这些优势包括: 简化配置:Spring Boot 的“约定优于配置”的原则意味着许多 Spring 应用的常见配置项被自动设置,这减少了开发人员需要编写和维护的配置代码量。快速启动和部署:Sprin…

陶哲轩工作流之人工智能数学验证+定理发明工具LEAN4 [线性代数篇2前置知识]不同求和范围不同函数项结果相等的条件

有空点赞我的视频哦:陶哲轩工作流之人工智能数学验证定理发明工具LEAN4 [线性代数篇2前置知识]不同求和范围不同函数项结果相等的条件_哔哩哔哩_bilibili -- 反向推理 refine sum_bij _ _ _ _ _ -- {s : Finset α} {t : Finset γ} {f : α → β} {g : γ → β…

Linux网络之PXE高效批量装机、Kickstart全自动化安装

一. PXE网络装机简介和相关知识 1. 常见的三种系统安装方式和相关文件 ① 三种系统安装方式 u启动安装:在U盘中下载相关的安装系统及镜像文件,u盘插机安装 光驱安装:将带有所需系统的光盘放进电脑服务器中,按照官方引导装机 …

春节假期出游一些很实用的手机技巧!这样玩,就很哇塞~

随着春节的脚步越来越近,无论是准备出游还是回家,你蠢蠢欲动的心是否已经拦不住了?华为 nova 12系列这些很哇塞的玩法你必须知道!这个新年让你旅行出圈有秘籍! 出发前智慧播报航班信息不错过。智慧播报的功能就很实…

AI大模型学习笔记之二:什么是 AI 大模型的训练和推理?

在人工智能(AI)的领域中,我们经常听到训练(Training) 和 推理(Inference) 这两个词汇,它们是构建强大 AI 模型的关键步骤。我们通过类比人类的学习过程来理解这两个概念,可以更加自然而生动地理…

JUC(java.util.concurrent)的常见类(多线程编程常用类)

Callable接口 这个东西可以类比于之前见过的Runnable接口.两者的区别在于Runnable关注执行过程,不关注执行结果.Callable关注执行结果,它之中的call方法(类比于run方法)返回值就是线程执行任务的结果.Callable<V>里面的V期望线程的入口方法里,返回值是啥类型,此处的泛型参…

Servlet中访问网页常遇到的问题

网页出现404 出现这一种情况是浏览器访问的资源不存在 第一种情况通常是路径出错请检查你的路径是否一致 第二种情况确认你的webapp是否被正确加载 smart tomcat由于只加载一个webapp 如果加载失败 就会直接启动失败 拷贝war方式到Tomcat要加载多个webapp如果失败只有日志 查…

软件测试|sqlalchemy relationship

简介 SQLAlchemy是一个流行的Python ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它允许我们以面向对象的方式管理数据库。在SQLAlchemy中&#xff0c;relationship是一个重要的功能&#xff0c;用于建立表之间的关系。在本文中&#xff0c;我们将详细探讨relation…

AutoRuns下载安装使用教程(图文教程)超详细

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 AutoRuns 是微软提供的一款「启动项管理」工具&#xff0c;可以检查开机自动加载的所有程…

UI设计中插画赏析和产品色彩分析

插画赏析&#xff1a; 1. 插画是设计的原创性和艺术性的基础 无论是印刷品、品牌设计还是UI界面&#xff0c;更加风格化的插画能够将不同的风格和创意加入其中&#xff0c;在激烈的竞争中更容易因此脱颖而出。留下用户才有转化。 2. 插画是视觉触发器&#xff0c;瞬间传达大量…

Effective C++——尽可能使用const

const允许指定一个语义约束&#xff08;也就是指定一个“不该被改动”的对象&#xff09;&#xff0c;而编译器会强制实施这项约束。只要保持某个值不变是事实&#xff0c;就应该说出来。以获得编译器的协助&#xff0c;保证不被违反。 const与指针 注意const的写法&#xff0…