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

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

隔离

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

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

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

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

熔断

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

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

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

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

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

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

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

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

限流

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

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

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

限流器的限流算法包括:

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

降级

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

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

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

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

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

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

相关推荐
mldong1 小时前
给若依加审批流,不用 Flowable
java·spring boot·架构
考虑考虑3 小时前
数据库中的EXISTS
运维·数据库·后端
讳疾忌医丶3 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
2601_963749103 小时前
越华环保集团污水站曝气系统边缘闭环控制架构与能耗优化实现
人工智能·架构
郑州光合科技余经理4 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
毅炼4 小时前
Rover-Suite 开源发布:轻量服务注册中心与网关一体化方案
java·后端·系统架构·gateway
天远数科5 小时前
零信任架构实战:基于天远全能消金报告构建自动化信贷评估网关
运维·人工智能·架构·自动化
PiaoKe___6 小时前
云手机虚拟化架构与多实例集群自动
智能手机·架构
许彰午6 小时前
44-useRowSet镜像实现
java·低代码·架构
海宇AI7 小时前
微服务架构实战:基于海宇对外投资历史查询服务构建自动化合规审计网关
人工智能·微服务·架构·自动化