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

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

隔离

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

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

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

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

熔断

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

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

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

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

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

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

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

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

限流

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

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

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

限流器的限流算法包括:

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

降级

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

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

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

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

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

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

相关推荐
咖啡八杯11 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
lizhongxuan12 小时前
AI Agent 上下文压缩利器 Headroom
后端
Csvn14 小时前
SSH 远程管理与安全加固 — 运维的守门之道
后端
IT_陈寒14 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
菜鸟谢16 小时前
Rust 智能指针完整详解
后端
菜鸟谢16 小时前
Rust 函数完整知识点详解
后端
爱勇宝16 小时前
淡泊名利之前,先承认我们都很焦虑
前端·后端·程序员
菜鸟谢16 小时前
Rust 闭包(Closure)完整详解
后端
ServBay16 小时前
如何利用本地技术栈构建 0 成本 AI SaaS 雏形
后端·aigc·ai编程
菜鸟谢16 小时前
Rust 集合 + 迭代器完整详解
后端