一个故事理解限流熔断降级

news/2025/1/15 15:43:23/文章来源:https://www.cnblogs.com/imyalost/p/18409394

无论是系统架构范畴,还是前几年性能测试和优化领域,大家都很喜欢讲三高(高并发高性能高可用),其中经常会出现这几个专业术语:缓存、限流、熔断、降级。

这些听起来很高大上的技术术语,到底是什么,在什么场景使用,它的作用又是什么,很多同学感觉云里雾里不太理解。

一个故事理解技术要点第三篇,这篇文章我们来聊聊在稳定性保障领域中经常出现的那些技术术语。

 

故事案例

先看下面这个故事案例:

假设你去银行取钱,你是用户,银行是一个软件系统。

直接在柜台取钱,相当于应用直接访问银行金库(数据库)。柜台数量有限(连接池),人稍微多一些,就会给柜台处理业务压力。所以很多银行对于小额存取款,都会引导用户去ATM机(缓存)

但是柜台和ATM机数量有限,所以需要在大厅设置用户休息等待区(缓冲区)。用户进入银行后刷卡取号(队列),进入休息等待区等候叫号,银行按叫号顺序处理业务。

假设周末来银行办理业务的人数过多,大堂经理(调度)会引导多余的用户去其他营业厅办理业务(限流),或者通过网上银行自助办理(分流),再或者改天来办理业务(熔断),降低银行的业务处理压力。

银行除了存取款,还有贷款业务,但贷款业务需要的材料手续多,业务复杂,流程长。如果来办理业务的人数过多,则可以设定贷款业务只在周三办理(降级),其他时间只办理存取款业务。

好了,故事讲完了,这就是关于缓存限流熔断降级的比喻形式,是不是很形象。

 

服务治理

在系统架构设计范畴,大家都希望系统具备“三高”的特性。因为只有系统具备高性能高可用高扩展性,才能应对复杂的业务流程,承载更多的用户访问。

“三高”只是架构设计实现的目标,要保障这个目标达成,自然少不了技术手段。一般将这些技术手段统称为服务治理,或者流量治理。而流量治理,则可以归结到服务稳定性保障领域。

在保障服务稳定性方面,流量治理的主要目的有如下几种:

  • 性能优化:通过流量路由、负载均衡等技术手段,确保系统资源高效利用,降低时延,避免拥塞。
  • 可用性保障:通过限流、降级、熔断等手段,确保核心业务和应用服务可以再高负载下也可以正常运行。
  • 故障容错恢复:在系统出现异常或宕机时,通过流量重定向手段快速摘除异常流量,并将请求路由到正常服务或备份机房上面,实现业务止血、故障转移和自我恢复,保障系统业务的持续可用性。
  • 降本增效:通过性能优化、服务调度和流量控制,降低软硬件成本,并通过线上应急响应机制和日常演练,提高处理问题的整体效率。

 

术语解析实践

1、限流

限流其实很好理解,毕竟系统的处理能力是有限的,限流则是对超过系统处理能力的流量进行控制。

一句户概括限流:控制访问应用的流量在系统承载范围内。

限流的主要目的是为了提升系统整体可用性,同时平衡用户体验和成本支出。

在实践中,执行限流有如下三点可参考的经验:

  • 在业务请求入口(网关)限流,避免内部互相调用放大流量。
  • 限流是个演进状态,从连接池、IP、指定SQL到更细的层级粒度做限流。
  • 每个调用层都做限流,每个应用先保证自己可用,对其他依赖调用要做到“零信任”。

2、熔断

在微服务系统中,一个服务可能会依赖多个服务,同时被其他服务依赖。以电商业务的订单服务为例,它会依赖库存商品和支付服务,同时也会被个人中心等服务依赖。

如果订单服务出现异常或者故障,如果不进行针对性处理,则会影响整个业务系统的正常运转,最后造成雪崩效应。

简单理解,所谓熔断就是保障系统和服务在过载或异常场景下系统正常运行的技术手段

以电商双十一大促为例,常见熔断案例有如下两种:

  • 双十一零点的前半小时, 动态推送,把日志关掉。
  • 流量高峰来临或者应用集群出问题时,留一台机器观察错误和异常的日志。

3、降级

所谓降级,简单理解就是在系统面临高负载时,人为将一些不重要或优先级不高的业务功能临时下线,降低系统压力,同时多出的这部分资源去支撑更核心的业务处理。

如果用一句话概括降级,则是强依赖通过熔断做紧急处理,弱依赖提前主动降级

在实践中,执行降级有如下三点可参考的经验:

  • 主动降级:提前进行风险识别,然后针对性的降级,可降低已知的风险。
  • 紧急降级:假设出现重大问题,才需要决策是否启用的方案(风险较大)。
  • 预案平台:平台化的目的是留痕,方便后续把限流降级熔断等配置恢复回来。

 

最后需要注意的是:无论限流还是降级以及熔断,本质上对业务都是有损的

即在尽可能保障服务可用的情况下提供业务可用,保障业务目标的达成。这是一个需要不断验证和评估投入产出比的过程。

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

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

相关文章

vue3 setup语法糖 扩展

安装扩展 npm i vite-plugin-vue-setup-extend 修改配置文件接下啦就可以直接在标签中写name了

ISCC 2024 部分WP

练武题 WEB 还没想好名字的塔防游戏 题目中给了塔防游戏的github原项目地址。下载题目的网页源代码,和github项目对比,发现基本只加了world.js里的三个提示。Cats Craft Scarves Ivory Towers Twinkle Dragons Whisper Secrets提示不知道是什么意思。但是看首字母有点奇怪,另…

protobuf cmake Visual Studio 编译安装 (全命令行)

protobuf cmake Visual Studio 编译安装 (全命令行)protobuf cmake Visual Studio 编译安装 中间踩了挺多的坑的, 这篇文章记录一下. 重要前言: 所有在引用框中的命令都不要输入!!cmake --install . # 在引用框中的不要输入到命令行cmake --install . --config Debug # 命令…

陈彦吉的第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 向教师和助教介绍自己,阐述自己期望的课程收获和扮演的课程实践角色姓名-学号 陈彦吉 2022329301139一、自我介绍 (一)基本信息 我叫陈彦吉,来自浙江台州,是2022级电气工程及其自动化(2)班…

(16)USB通信

USB协议讲解(大范围讲解) USB,英文全称 Universal Serial Bus(通用串行总线),是一种支持热插拔的高速串行传输总线(目前已发展至3.0) USB体系包括主机、设备以及物理连接三部分,其中: 主机是一个提供USB接口以及接口管理能力的硬件、软件及固件复合体,可以使PC,也可…

Redis 入门 - C#|.NET Core客户端库六种选择

介绍了6款.NET系Redis客户端库:ServiceStack.Redis、StackExchange.Redis、CSRedisCore、FreeRedis、NewLife.Redis、BeetleX.Redis,各具特色,如商业支持、高性能、高并发、低延迟等,适合不同场景和需求。经过前面的Redis基础学习,今天正式进入编码阶段了,进入编码阶段我…

[NLP] 知识抽取技术

1 概述:知识抽取 定义知识抽取通常指从非结构化文本中挖掘结构化信息。例如,含有丰富语义信息的标签和短语。 这在业界被广泛应用于内容理解和商品理解等场景,通过从用户生成的文本信息中提取有价值的标签,将其应用于内容或商品上知识抽取通常伴随着对所抽取标签或短语的分…

如何用 Scrapy 爬取网站数据并在 Easysearch 中进行存储检索分析

做过数据分析和爬虫程序的小伙伴想必对 Scrapy 这个爬虫框架已经很熟悉了。今天给大家介绍下,如何基于 Scrapy 快速编写一个爬虫程序并利用 Easysearch 储存、检索、分析爬取的数据。我们以极限科技的官网 Blog 为数据源,做下实操演示。 安装 scrapy 使用 Scrapy 可以快速构建…

个人项目—论文查重

个人项目———论文查重这个作业属于哪个课程 计科12班这个作业的要求在哪里 作业要求这个作业的目标 实现论文查重,给定原文件和抄袭的文件,输出二者的相似度到答案文件中GitHub链接:github 1.题目要求 题目:论文查重 描述如下: 设计一个论文查重算法,给出一个原文文件和…

一款用于Redis漏洞的利用工具

Hack分享吧声明 该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。工具介绍 @yuyan-sec使用golang写的一款Redis漏洞利用工具。 注意:主从复制会清空数据,主从复制会清空数据…

AGC007F Shik and Copying String

涉及知识点:Ad-hoc,贪心 题意 Link 给出两个长度相同的字符串 \(S,T\),定义一次操作为: 从头至尾处理每一位,每位可以变成上一位,或者不变。 求最少对 \(S\) 进行多少次操作使得 \(S=T\)。 思路 引理 可以发现,一次操作其实类似于选择一些点 \(l\),从左到右覆盖它后面的…

全网最适合入门的面向对象编程教程:47 Python函数方法与接口-回调函数Callback

回调函数是编程中一种非常常见的模式,用于将函数作为参数传递给其他函数或方法。这种模式在 Python 中广泛应用于事件处理、异步编程、函数式编程等场景。全网最适合入门的面向对象编程教程:47 Python 函数方法与接口-回调函数 Callback摘要: 回调函数是编程中一种非常常见的…