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

【分布式】——降级熔断限流

降级&熔断&限流

⭐⭐⭐⭐⭐⭐
Github主页👉https://github.com/A-BigTree
笔记仓库👉https://github.com/A-BigTree/tree-learning-notes
个人主页👉https://www.abigtree.top
⭐⭐⭐⭐⭐⭐


如果可以,麻烦各位看官顺手点个star~😊

如果文章对你有所帮助,可以点赞👍收藏⭐支持一下博主~😆


文章目录

  • 降级&熔断&限流
    • 1 前言
    • 2 降级与熔断
    • 3 限流降级


1 前言

什么是熔断,什么是降级,熔断与降级是同一个意思吗?

在这里插入图片描述

如上图所示,服务A接收客户端请求,服务B提供给内部服务调用,每个服务部署的节点数至少两个。

在事发之前的近一周,服务B都一直运行正常,而事发的那晚请求量突增一倍,显然,此次事故与请求突增脱不了干系。因突增请求导致服务B高负荷运转,超出临界点的请求最后超出设定的接口超时时间,再由于服务B的一个隐藏性能问题导致内存消耗殆尽,进程开始频繁GC,但服务A还是不断地往服务B发送请求,导致服务B奔溃,服务B的奔溃又直接导致服务A崩溃,这种产生连带效应的服务奔溃称为服务雪崩。

2 降级与熔断

分析完事故后,我们再来说说熔断降级。熔断与降级不是一个概念,但熔断却伴随着降级,熔断在满足某种降级策略时触发,所以熔断是降级方式的一种,熔断是自动降级的一种实现

做电商项目的朋友可能接触最多的就是服务降级,一般我们在搞大促之前,都会通过开关方式将一些无关紧要的业务接口变成“不可用”。例如,通过配置中心或者通过Redis控制服务降级开关,当开关打开时,需要降级的接口直接响应一个表达当前服务降级的状态码给调用端。

控制服务降级开关的方式可以是人工,也可以是定时任务在某个时段开启、某个时段关闭,这种降级方式称为开关降级。开关降级与熔断降级都属于服务降级,服务降级的目的都是确保服务以稳定状态运行,防止服务奔溃的出现。

熔断指的是,当服务A的下游服务B突然变得不可用或者不稳定时,服务A可以自动切断与服务B的交互从而保证自己可用,就像保险丝一样,当电流异常升高到一定高度的时候,保险丝切断电流,这就是熔断。

熔断需要条件触发,而这个触发条件就是我们设置的一种服务降级策略,例如,在每秒请求异常数超过多少时触发熔断、在每秒请求异常错误率超过多少时触发熔断、在每秒请求平均耗时超过多少时触发熔断。

熔断是切断请求,快速失败,在触发熔断时让服务A不再访问服务B,但这不是永久。以某个资源(接口)采取平均每秒请求异常数超出5个时熔断的策略为例,假设当前时间窗口(时间单位)已经发生5个异常,那么当前时间窗口内的后续请求都会被熔断,但下一个时间窗口又会重新计算异常总数。

3 限流降级

服务降级除以上说到的开关降级和熔断降级外,还有一种常用的服务降级方式:限流降级

限流是限制单位时间内处理的请求数,拦截请求做降级处理。例如,通过压测得到单个服务节点单位时间内所能处理的最大请求数,使用该数值做为降级条件,当并发处理的请求数超过这个数值时,超出的部分请求降级处理。常见限流规则如按QPS限流、按最大并行使用线程数限流。

限流还可限制单位时间内发往一个服务集群的请求总数不能超过多少,即对一个服务集群限流,不过集群限流方式实现上比单机难度稍大,需要统计单位时间内集群处理的请求数据信息。通常集群限流用于网关层,由网关限制请求某个服务集群的请求数。

相关文章:

  • 3月25日,每日信息差
  • 【python】Jupyter Notebook 修改默认路径
  • 界面控件DevExpress WinForms/WPF v23.2 - 电子表格支持表单控件
  • DHCP snooping、DHCP安全及威胁防范
  • 力扣刷题31-33(力扣 0024/0070/0053)
  • Linux kernel高频技术面试题一
  • 解决错误LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to
  • 云原生周刊:Kubernetes v1.30 一瞥 | 2024.3.25
  • STM32 库函数 3*4矩阵键盘
  • 简明 Python 教程(第5章 函数)
  • 动态内存分配
  • 区块链安全之DDoS防护的重要性及其实施策略
  • CentOS Stream 8系统配置阿里云YUM源
  • 基于pear-admin-flask 的 flask 使用教程
  • 代码随想录Day59:下一个更大元素II、接雨水
  • Apache的80端口被占用以及访问时报错403
  • C++入门教程(10):for 语句
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 回顾2016
  • 前端相关框架总和
  • 首页查询功能的一次实现过程
  • 移动端解决方案学习记录
  • 因为阿里,他们成了“杭漂”
  • 【云吞铺子】性能抖动剖析(二)
  • UI设计初学者应该如何入门?
  • ​批处理文件中的errorlevel用法
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (八)Spring源码解析:Spring MVC
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (强烈推荐)移动端音视频从零到上手(下)
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [1]-基于图搜索的路径规划基础
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [20180224]expdp query 写法问题.txt
  • [Android]Tool-Systrace
  • [CCIE历程]CCIE # 20604
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽
  • [Hive] CTE 通用表达式 WITH关键字
  • [IE9] IE9 beta版下载链接
  • [Jquery] 实现温度计动画效果
  • [LOJ161] 仙人掌计数
  • [MTK]安卓8 ADB执行ota升级
  • [mysql] mysqldump 导出数据库表
  • [Open3d]: 知识记录
  • [Quest ActiveRoles Management Shell for Active Directory] QADProxyAddress命令相关的bug。
  • [Spring boot] Spring boot 实现发送邮件功能
  • [Spring] Spring Boot 生态