秒杀架构设计

seckilling system design

Posted by hello2mao on August 14, 2019

1. 业务特点

瞬时并发量大 秒杀时会有大量用户在同一时间进行抢购,瞬时并发访问量突增 10 倍,甚至 100 倍以上都有。

库存量少 一般秒杀活动商品量很少,这就导致了只有极少量用户能成功购买到。

业务简单 流程比较简单,一般都是下订单、扣库存、支付订单

2. 架构设计思想

限流 由于活动库存量一般都是很少,对应的只有少部分用户才能秒杀成功。所以我们需要限制大部分用户流量,只准少量用户流量进入后端服务器

削峰 秒杀开始的那一瞬间,会有大量用户冲击进来,所以在开始时候会有一个瞬间流量峰值。如何把瞬间的流量峰值变得更平缓,是能否成功设计好秒杀系统的关键因素。实现流量削峰填谷,一般的采用缓存和 MQ 中间件来解决

异步 秒杀其实可以当做高并发系统来处理,在这个时候,可以考虑从业务上做兼容,将同步的业务,设计成异步处理的任务,提高网站的整体可用性

缓存 秒杀系统的瓶颈主要体现在下订单、扣减库存流程中。在这些流程中主要用到 OLTP 的数据库,类似 MySQL、SQLServer、Oracle。由于数据库底层采用 B+ 树的储存结构,对应我们随机写入与读取的效率,相对较低。如果我们把部分业务逻辑迁移到内存的缓存或者 Redis 中,会极大的提高并发效率

3. 整体架构

ms-arch

4. 秒杀整体流程图

ms-flow.png

5. Ref

秒杀业务架构优化之路:http://www.infoq.com/cn/articles/flash-deal-architecture-optimization 互联网秒杀业务设计:https://baijia.baidu.com/s?old_id=108134 高并发秒杀系统架构设计:https://zhuanlan.zhihu.com/p/25368538