4. Design Flash Sale & Booking System
info
设计秒杀系统 (AKA. Seckill System) 与订票系统
Overview
- Step1. Scenario 场景
- 需要设计哪些功能,有哪些场景
- Ask / Features / QPS / DAU / Interfaces
- Step2. Service 服务
- 将大系统拆分为小服务
- Split / Application / Module
- Step3. Storage 存储
- 数据如何存储和访问
- Schema / Data / SQL / NoSQL / File System
- Step4. Scale 升级
- tradeoff 取舍并解决缺陷,处理可能遇到的问题
- Sharding / Optimize / Specical Case
Step1. Scenario
- 订票 订酒店
- 抢购商品手机等
QPS 分析
- 平日每秒 1000 人访问该页面
- 秒杀时每秒数 10 万人访问该页面
- QPS 增加 100 倍以上
流程分析
需要解决的问题
- Large flow and high concurrency
- 瞬时大流量高并发
- 服务器、数据库等能承载的 QPS 有限,如数据库一般是单机 1000 QPS。需要根据业务预估并发量。
- Over sale
- 有限库存,不能超卖
- 秒杀的商品种类是比较少的
- 库存是有限的,需要精准地保证,就是卖掉了 N 个商品。不能超卖,当然也不能少卖了。
- Malicious ticket Grab
- 黄牛恶意请求
- 使用脚本模拟用户购买,模拟出十几万个请求去抢购。
- Fixed time
- 固定时间开启。以服务器时间为准
- 时间到了才能购买,提前一秒都不可以
- Purchase limit
- 严格限购
- 一个用户,只能购买 1 个或 N 个。
需求拆解
- 商家侧
- 新建秒杀活动
- 配置秒杀活动
- User
- App page (Web / Mobile)
- Order
- Pay