【图解秒杀系列】秒杀技术点——隔离、熔断、限流、降级

【图解秒杀系列】秒杀技术点------隔离、熔断、限流、降级

隔离

隔离的思想其实就是舱壁模式,这在Docker中有所体现。在Docker中,容器与容器间互相隔离互不影响。一个容器有它独立的与外界隔离的环境与资源,包括CPU、内存等,如果容器中的服务出问题,比如占用资源过高,也不会影响到别的容器中的服务。

我们的秒杀系统同样可以应用这种思想。秒杀系统的隔离是指单独部署一套秒杀服务,与常规的服务区分开,这样即使秒杀服务出了问题,原先的服务也不会受影响。

单独部署一套秒杀服务,看起来成本有点过高,但是现在是云计算时代,很多企业都在云上部署自己的服务,不像过去自己采购机器在物理机上部署服务。现在各云服务厂商都有相关的服务,比如阿里云有ECS和云容器服务,我们只要在上面租用相关的服务器即可。

而且在云上部署服务还有一个好处,就是弹性扩缩容的机制。当服务器压力过大时,可以通过弹性扩容动态地临时扩充服务器,以应对暂时地流量洪峰,等压力降下来之后,又可以自动缩容。

熔断

熔断机制可以有效保护我们的系统不会被一些异常服务拖垮。比如某些服务不可用或者响应超时,如果没有熔断措施的保护的话,就有可能造成服务雪崩。

当我们为我们的系统增加了熔断措施的保护之后,就可以保护调用方服务免受被调用方的不可用而导致自己也受影响。

熔断功能通过增加一个断路器实现。

断路器一般有三个状态:关闭、打开、半开。

  • 关闭状态:如果一个开关处于闭合状态,此时接口可以执行正常的逻辑处理。
  • 打开状态:如果一个开关处于打开状态,此时接口的所有请求都会被降级处理。
  • 半开状态:处于半开状态的断路器,允许一个请求执行正常的逻辑处理,这相当于是试探性的调用一下,如果能正常返回结果,那么断路器恢复为闭合状态,否则变为打开状态。

断路器的三种状态间的转换如下图:

当断路器处于打开状态时,由于接口的正常逻辑无法执行,此时就是进行降级处理。

目前市面上的开源中间件中,Hystrix和Sentinel都有这样的功能。

限流

限流也叫流控,也就是流量控制,作用是限制流入服务接口的流量大小。每一个服务或接口能扛住的流量大小都是有上限的,如果超过了这个上限,就有可能造成性能下降或服务不可用。

限流通过在服务或接口前添加限流器实现。如果流量没有超过限流器的阈值,那么请求可以正常通过;如果流量超过限流器的阈值,那么超过阈值的这一部分请求就要被拦截掉。

被流控的请求,可以报错返回错误信息,也可以走降级处理的逻辑。

限流器的限流算法包括:

  • 简单时间窗算法
  • 滑动时间窗算法
  • 漏桶算法
  • 令牌桶算法

降级

当我们的系统经过层层优化之后,最终还是扛不住高并发的压力的话。可以考虑进行降级处理。

也就是说停掉我们系统中一些非核心服务,保证核心服务的正常运行,也就是丢车保帅。通过下线掉非核心服务,原先这些服务所占用的服务器资源(比如CPU、内存)等就可以腾出来,供核心服务使用。

这是服务级别的降级,还有接口级别的降级。

接口级别的降级是指,原有的逻辑无法正常执行,转而执行的一段备用的有损的逻辑。

比如服务A的接口调用服务B的接口发生异常或超时,那么服务A的接口进行降级逻辑,调用本地的一个方法,返回默认的数据。

除此以外,断路器打开,那么也会执行降级逻辑,而不会走正常逻辑。

相关推荐
2401_8949155319 分钟前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
SomeB1oody5 小时前
【RustyML入门】6.3. 并行归约
开发语言·后端·机器学习·rust·教程
ZGIAI5 小时前
ZGI Workflow 并发控制:保护下游接口
人工智能·架构
ZGIAI5 小时前
知识库有结果,不等于召回率合格
人工智能·架构
Profile排查笔记6 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
用户938515635076 小时前
用 AI 结对编程从 0 搭一个"单词后台管理系统":Next.js + Supabase + Drizzle + shadcn/ui 全记录
后端·postgresql·next.js
爱学习的小邓同学6 小时前
Golang --- (1)第一个Golang程序
开发语言·后端·golang
老郑聊AI业财智造7 小时前
从“数字影子”到“智能共生体”:数字孪生的架构演进与产业落地全景剖析
架构
网安蟹佬霸7 小时前
WAF绕过技术实战:从规则检测到编码绕过全指南(2026最新版,附Payload集与自动化脚本)
运维·安全·网络安全·架构·自动化·网安
小灰灰搞电子7 小时前
Rust+Slint 实现的“DNA双螺旋”加载动画源码分享
后端·rust·slint·加载动画