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

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

隔离

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

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

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

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

熔断

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

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

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

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

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

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

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

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

限流

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

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

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

限流器的限流算法包括:

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

降级

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

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

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

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

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

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

相关推荐
kfaino12 分钟前
码农的AI翻身(六)你好,我叫 Parameter
后端·aigc
掘金者阿豪14 分钟前
把业务数据变成共享仪表盘:Metabase可视化与远程访问实践
前端·后端
猪猪拆迁队1 小时前
虚拟工厂仿真引擎的架构设计:让一条产线可编程、可观测、可干预
后端·ai编程
字节跳动数据库2 小时前
文章分享——相似函数处理方法
人工智能·后端·程序员
云技纵横2 小时前
@Transactional 失效的 7 种场景:第 5 种最难排查
后端
用户6757049885022 小时前
你知道 Go 结构体和结构体指针调用的区别吗?一文带你彻底搞懂!
后端·go
程序员cxuan2 小时前
读懂 Claude Code 架构分析系列,第一篇,开始!
人工智能·后端·架构
用户6757049885022 小时前
面试官问“装饰器模式”,这样回答薪资多要 3000!
后端
tntxia2 小时前
Geo Scene域名修改引起的一些问题
后端
用户298698530142 小时前
Java 实现 Word 文档加密与权限解除
java·后端