vlambda博客
学习文章列表

一文读懂-秒杀系统如何提升稳定性性能的

在电商领域,存在着典型的秒杀业务场景,那何谓秒杀场景呢?简单的来说就是网络商家为了促销等目的进行的网上限时抢购活动。比如每年的618、双11大促,12306抢票等业务场景,就是典型的秒杀业务场景


秒杀系统具有如下技术特点:

  1. 瞬时并发量非常高

    秒杀时会有大量用户在同一时间进行抢购,瞬时并发峰值非常高,访问量突然增加10倍,甚至100倍以上都有可能

  2. 高并发读/写

    大量用户进来,无论是对商品详情查询,还是进行购买操作,访问量都是突增的

  3. 高可用

    秒杀时会有大量用户进来,对系统的稳定性要求较高,如出现服务故障会影响用户体验,以及商家口碑,甚至有可能导致直接的经济损失,影响还是比较大的。务必保证系统高可用性。


针对秒杀系统的特点,可以通过如下措施来提升系统的性能:

  1. 高并发读优化

    秒杀系统通常会带来高并发的查询,如果每次请求先通过应用服务再到数据库查询数据,然后将查询的数据由下及上返回,势必会对数据库造成巨大的压力,可以考虑通过引入缓存,缩短请求路径,让请求流量不要直接查询数据库来解决大流量的。

  2. 流量削峰

    由于秒杀请求在短时间内高度集中于某一特定的时间点,会导致一个特别高的流量峰值,它对资源的消耗是瞬时的。一台服务器处理资源的能力是固定的,如果出现流量峰值的话,很容易造成系统的瓶颈,况且最终能够秒杀到商品的请求是固定的,比如1万个秒杀请求到最后真正能成功的请求可能只有1000个。因此,我们需要设计一些原则,让并发的请求更加平缓有序地进行,这也是为什么需要流量削峰的原因。量削峰,最容易想到的就是消息队列。可使用消息队列来缓冲瞬时流量将同步请求转换为异步请求。间接缓解数据库层的压力。

  3. 高可用之限流、降级

    3.1 限流

         当系统因流量暴增而导致系统运行缓慢或宕机时,为了保证服务的高可用,我们需要通过限制一部分流量来保护系统,并做到既可以人工执行开关,也支持自动化保护的措施。限流是比降级更极端的一种保护措施。限流即可在客户端限流,也可以在服务端限流。限流的实现方式既要支持接口QPS限流,也支持系统级别QPS限流。例如,系统最高支持2W QPS时,可以设置1.6W QPS来进行限流保护,留出20%的冗余量。

    3.2 降级

          在业务高峰时,为了保证服务的高可用,往往需要服务或者页面有策略地不处理或换一种简单的方式处理(比如:屏蔽或限制非核心功能使用,或接口调用),从而释放服务器资源以保证核心交易正常运作或高效运作。在分布式微服务架构这种技术被称为服务降级。

    触发降级条件有:超时降级、失败次数降级、故障降级、拒绝服务降级、限流降级

    3.3 拒绝服务

          如果系统流量实在太大,严重超出了系统的负载,系统可以直接拒绝所有的请求。比如,HTTP请求直接返回503错误码。拒绝服务是一种不得已的方案,同时也是最暴力最有效的系统保护方法。系统虽然在过载时无法提供服务,但是仍然可以运作,当负载下降时又很容易恢复,所以每个系统和每个环节都应该设置这个方案,以对系统做最坏情况下的保护。

  4. 业务优化

     更多的是从用户角度或业务角度,增加操作时长,稀释瞬间并发用量,降低对系统的冲击,比如,登录增加验证码校验、分时分段、禁用秒杀按钮等。大家比较熟悉是12306抢票网站,登录增加了应答码,分时分段抢购车票。

5. 高可用之避免单点故障

     单点意味着没有备份,风险不可控,一旦单点出问题,整个服务将不可用。单点并不单指服务,还包括数据库、缓存、消息中间件等。