服务降级、熔断、限流

2023-11-08

目录

目录

1、概念

1.1 降级

1.1.1 常见降级:

1.1.2 示例

1.2 熔断

1.2.1 熔断设计

1.2.2 示例

1.3 限流

1.3.1 算法

1.3.2 示例

2、区别

3、案例


1、概念

1.1 降级

  • 服务降级处理是在客户端实现完成的,与服务端没有关系。
  • 当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。降级的思想是丢车保帅。

1.1.1 常见降级:

  • 服务接口拒绝服务:页面能访问,但是添加删除提示服务器繁忙。页面内容也可在Varnish或CDN内获取。
  • 页面拒绝服务:页面提示由于服务繁忙此服务暂停。跳转到varnish或nginx的一个静态页面。
  • 延迟持久化:页面访问照常,但是涉及记录变更,会提示稍晚能看到结果,将数据记录到异步队列或log,服务恢复后执行。
  • 随机拒绝服务:服务接口随机拒绝服务,让用户重试,目前较少有人采用。因为用户体验不佳。

1.1.2 示例

A -> B -> C,C服务存在C1、C2、C3、C4

  1. 如果C4优先级较低,一定是先降级优先级低的接口C4 。
  2. 如果服务链路整体没有性能特别差的点,比如就是外部流量突然激增,那么就从外到内开始降级。 
  3. 如果某个服务能检测到自身负载上升,那么可以从这个服务自身做降级。

1.2 熔断

如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

1.2.1 熔断设计

三个模块:熔断请求判断算法、熔断恢复机制、熔断报警。

  • 熔断请求判断机制算法:使用无锁循环队列计数,每个熔断器默认维护10个bucket,每1秒一个bucket,每个blucket记录请求的成功、失败、超时、拒绝的状态,默认错误超过50%且10秒内超过20个请求进行中断拦截。
  • 熔断恢复:对于被熔断的请求,每隔5s允许部分请求通过,若请求都是健康的(RT<250ms)则对请求健康恢复。
  • 熔断报警:对于熔断的请求打日志,异常请求超过某些设定则报警。

1.2.2 示例

A -> B -> C,如果C出现问题了,那么B熔断了,则A就不用熔断了。

1.3 限流

限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。

常见限流方式

  • 基于请求限流:指从外部请求的角度考虑限流。

  • 基于资源限流:指从系统内部考虑,找到影响性能的关键资源,对其使用上限限制。

1.3.1 算法

  • 漏桶算法:漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。
  • 令牌桶算法:对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。
    令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。

单机限流:Guava 中的 RateLimiter。在 Guava 的 RateLimiter 中,使用的就是令牌桶算法,允许部分突发流量传输。在其源码里,可以看到能够突发传输的流量等于 maxBurstSeconds * qps。

集群限流:TC 提供的 common-blocking 组件提供此功能。

算法对比:https://blog.csdn.net/xixingzhe2/article/details/128904027

1.3.2 示例

B只允许A以QPS<=5的流量请求,而C却只允许B以QPS<=3的qps请求,那么B给A的设定就有点大,上游的设置依赖下游。而且限流对QPS的配置,可能会随着服务加减机器而变化,最好是能在集群层面配置,自动根据集群大小调整。

2、区别

概念 目的 触发方 触发场景 解决方 处理方案 所有用户表现一致 用户表现
熔断 从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃 某个服务(下游服务)不可用 当失败的调用到一定阈值,如缺省是5秒内20次调用失败,就会启动熔断机制,自动触发 调用方 开启熔断之后,如何实现自动恢复?每隔一段时间,释放一个请求到服务端进行探测,如果后端服务已经恢复,则自动恢复 不一致 用户体验到的是某些功能暂时不可达或不可用
降级 为防止系统的整体缓慢甚至崩溃 服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉 整体负荷比较大,进行人工干预 调用方 取消降级 一致 用户体验到的是某些功能暂时不可达或不可用
限流 通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统 通过对进行限速来保护系统 超出了服务每分钟的调用量或服务的某个方法调用量 如果是由于当时压测并发数较高引起;视具体情况而定 调大阈值 一致 一旦达到限制速率则可以拒绝服务或等待

3、案例

如果你来设计一个整点限量秒杀系统,包括登录、抢购、支付(依赖支付宝)等核心功能,你会如何设计接口级的故障应对手段?

思路:

  • 降级(丢车保帅):在秒杀时,通过服务降级把注册、修改个人信息等非核心功能关闭掉。
  • 熔断:支付依赖第三方服务,要设置熔断策略,熔断后要给出友好提示,比如10分钟后再来支付。
  • 限流:抢购下单接口采用限流方式,如抢购1000件商品,则设置2000大小的队列,请求超过2000后直接拒绝掉。

参考:

服务降级、熔断、限流的区别_会思考的男人的博客-CSDN博客_服务熔断和服务降级和服务限流

压力测试术语之熔断、降级、限流-布布扣-bubuko.com

服务降级,服务熔断,服务限流 - 巍巍的个人页面 - OSCHINA - 中文开源技术交流社区

熔断,限流,降级 一些理解 - 简书

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务降级、熔断、限流 的相关文章

随机推荐

  • 手把手教你hadoop集群配置(详细)

    本博客用到的虚拟机客户机已将前五步完成 从6 开始 现有三台客户机 hadoop112 hadoop113 hadoop114 其中hadoop112已完成JDK Hadoop的安装以及环境变量的配置 所以需要将112上的两者复制到113和
  • vs code因系统更新重启被关闭,找回未保存代码文件

    版权声明 转载请注明作者 独孤尚良dugushangliang 出处 https blog csdn net dugushangliang article details 123527489 win10系统 晚上没关机 点了睡眠 想着后面再
  • 嵌入式数据库sqlite3【基础篇】-基本命令操作,小白一看就懂

    前言 数据在实际工作中应用非常广泛 数据库的产品也比较多 oracle DB2 SQL2000 mySQL 基于嵌入式linux的数据库主要有SQLite Firebird Berkeley DB eXtremeDB 本文主要讲解数据库SQ
  • Python画图常用代码总结,这20个画图代码现拿现用

    目录 前言 1 散点图 2 带边界的气泡图 3 带线性回归最佳拟合线的散点图 4 抖动图 5 计数图 6 边缘直方图 7 边缘箱形图 9 矩阵图 10 发散型条形图 11 发散型文本 12 发散型包点图 13 带标记的发散型棒棒糖图 14
  • 聚焦功能安全,Imagination如何助力更安全的汽车芯片

    8 月29 日 由 OFweek 维科网主办 OFweek 电子工程网承办的 OFweek 2023中国国际汽车产业大会 在深圳圆满收官 本次大会以 芯动 行动 驾驭未来 为主题 邀请了业内众多专家学者 围绕车载芯片 MCU 传感器 车联网
  • 安装tomcat的步骤与部署服务详解

    目录 一安装tomcat步骤 1 首先关闭防火墙跟安全机制 2 安装jdk把jdk包与tomcat的包下载到 opt目录 3 然后用命令查看安装好的版本号 4 安装好jdk后需要把他设置到环境变量中去以免系统找不到 5 下来装tomcat
  • UnboundLocalError: local variable ‘loss’ referenced before assignment解决方法

    Traceback most recent call last File src main py line 442 in
  • c++之构造函数详解

    C 构造函数的理解 相对于C语言来说 C 有一个比较好的特性就是构造函数 即类通过一个或者几个特殊的成员函数来控制其对象的初始化过程 构造函数的任务 就是初始化对象的数据成员 无论何时只要类的对象被创建 就会执行构造函数 构造函数的语法 构
  • SCI投稿中的状态解读

    转载 SCI投稿中的简写 ADM AE EIC等 与状态解读https blog csdn net Strive For Future article details 113932172
  • 运输层---UDP协议

    目录 一 无连接运输 UDP 1 1 定义 1 2 特点 1 3 应用 二 UDP报文段结构 三 UDP检验和 3 1 定义 3 2 检验和计算实例 3 3 UDP检验和的局限 一 无连接运输 UDP 1 1 定义 UDP User Dat
  • 高光谱图像选择波段的研究

    免责声明 本文仅代表个人观点 如有错误 请读者自己鉴别 如果本文不小心含有别人的原创内容 请联系我删除 本人心血制作 若转载请注明出处 本文是根据 魏芳洁 所著的 高光谱图像波段选择方法的研究 一文而写 基本细节皆引自此文 高光谱主要问题是
  • svn 错误 以及 中文翻译

    比较长 如何查找不方便的话 用查找 CTRL F 吧 Simplified Chinese translation for subversion package This file is distributed under the same
  • GraphPad Prism 9 for Mac 的使用教程

    一 图形类型怎么选择 1 XY 折线图 散点图 适用于线性回归 非线性回归 相关性分析 2 Column 柱状图 适用于单因素的统计分析 如单个样本的t检验 3 Grouped 适用于两个因素或者多因素的方差分析 4 Contingency
  • 多线程案例

    目录 一 单例模式 二 阻塞式队列 三 定时器 四 线程池 一 单例模式 单例模式其实是一种设计模式 而设计模式简单来说其实就是针对一些常见场景给出的一些经典解决方案 让程序员可以更好的解决问题 我们到目前为止一般涉及到的设计模式有两种 单
  • MySQL 数据类型

    MySQL支持多种类型 大致可以分为三类 数值 日期 时间和字符串 字符 类型 数值类型 MySQL支持所有标准SQL数值数据类型 这些类型包括严格数值数据类型 INTEGER SMALLINT DECIMAL和NUMERIC 以及近似数值
  • RedisJSON介绍

    RedisJSON 是一种高性能 JSON 文档存储 允许开发人员构建现代应用程序 它在内存中存储和处理 JSON 以亚毫秒级支持每秒数百万次操作响应时间 JSON 文档的原生索引 查询和全文搜索允许开发人员创建二级索引 快速查询数据 企业
  • 微电网日前优化调度 。算例有代码(1)

    个人电气博文传送门 学好电气全靠它 个人电气博文目录 持续更新中 符号说明 问题1 求解 经济性评估方案 若微网中蓄电池不作用 且微网与电网交换功率无约束 在无可再生能源和 可再生能源全额利用两种情况下 分别计算各时段负荷的供电构成 kW
  • 跑马灯-------寄存器版本

    拿到一个工程模板 首先要编译 编译成功之后再删除main 内容 这样编译不会出错 程序步骤 配置时钟使能寄存器 RCC AHB1ENR寄存器 用来时钟使能 然后 跑马灯IO口是PF9 PF10 GPIOF在RCC AHB1ENR 中是第五位
  • Eclipse 插件开发中使用Target Platform

    使用Eclipse IDE做插件 Plugin 开发的时候 有时会遇到开发的平台跟当前Eclipse版本不一致的问题 解决办法之一就是在当前项目中定义自己的target platform 文件 创建Target Platform文件 1 创
  • 服务降级、熔断、限流

    目录 目录 1 概念 1 1 降级 1 1 1 常见降级 1 1 2 示例 1 2 熔断 1 2 1 熔断设计 1 2 2 示例 1 3 限流 1 3 1 算法 1 3 2 示例 2 区别 3 案例 1 概念 1 1 降级 服务降级处理是在