# 《Seckill秒杀系统》第94章:服务雪崩与容错方案

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:了解并发对系统的影响,掌握缓存穿透、缓存击穿和缓存雪崩问题的核心概念、产生的场景与预防方案,掌握系统容错的实现方案,根据适合的场景将系统容错的方案应用到自身实际项目中。

大家好,我是冰河~~

秒杀系统尽管能够支持瞬时高并发、大流量的场景,但是在整个秒杀活动过程中,随着高并发流量的持续,秒杀系统整个交易链路内部的服务也可能难免出现一些短暂的卡顿或者异常,如果这些短暂的卡顿或者异常处理不及时,或者系统没有自动容错能力,就可能在秒杀系统交易链路中引起连锁反应,导致一系列的事故发生,最终造成灾难性后果。

# 一、前言

秒杀开始时,大量的请求流量会像千军万马一样涌入系统,此时秒杀系统的压力会骤然增加,CPU使用率飙升,IO处理与等待时间变长。请求与响应时间的TP99和TP95等等指标就会变差。实际生产环境是非常复杂的,如果秒杀系统在持续高并发流量下,秒杀交易链路上哪怕一个很小的服务出现问题,就可能造成整个秒杀系统出现灾难性的后果。

所以,对秒杀系统来说,除了对其进行各种优化措施和流控措施外,还需要对秒杀系统实施容错方案。

# 二、本章诉求

介绍并发对秒杀系统的影响,简单介绍服务雪崩的相关的知识,这里会涉及到缓存穿透、击穿和雪崩问题。随后给出服务容错相关的实现方案。重在理解服务雪崩的问题和出现的场景,掌握缓存穿透、击穿和雪崩问题出现的场景和预防方案,重点掌握服务容错的方案,并将这些落地方案灵活应用到自身实际项目中。

# 三、并发对系统的影响

当一个系统的架构设计采用微服务架构模式时,会将庞大而复杂的业务拆分成一个个小的微服务,各个微服务之间以接口或者RPC的形式进行互相调用。在调用的过程中,就会涉及到网路的问题,再加上微服务自身的原因,例如很难做到100%的高可用等。如果众多微服务当中的某个或某些微服务出现问题,不可用或者宕机了,那么其他微服务调用这些微服务的接口时就会出现延迟。如果此时有大量请求进入系统,就会造成请求任务的大量堆积,甚至会造成整体服务的瘫痪。

# 四、服务雪崩

系统采用分布式或微服务的架构模式后,由于网络或者服务自身的问题,一般服务是很难做到100%高可用的。如果一个服务出现问题,就可能会导致其他的服务级联出现问题,这种故障性问题会在整个系统中不断扩散,进而导致服务不可用,甚至宕机,最终会对整个系统造成灾难性后果。

这里,小伙伴们可以对比冰河写的《【高并发】面试官:讲讲什么是缓存穿透?击穿?雪崩?如何解决? (opens new window)》一文进行记忆。

为了最大程度的预防服务雪崩,组成整体系统的各个微服务需要支持服务容错的功能。

# 五、服务容错方案

服务容错在一定程度上就是尽最大努力来兼容错误情况的发生,因为在分布式和微服务环境中,不可避免的会出现一些异常情况,我们在设计分布式和微服务系统时,就要考虑到这些异常情况的发生,使得系统具备服务容错能力。

常见的服务错误方案包含:服务限流、服务隔离、服务超时、服务熔断和服务降级等。

# 5.1 服务限流

服务限流就是限制进入系统的流量,以防止进入系统的流量过大而压垮系统。其主要的作用就是保护服务节点或者集群后面的数据节点,防止瞬时流量过大使服务和数据崩溃(如前端缓存大量实效),造成不可用;还可用于平滑请求。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码