电商秒杀系统
背景
商品销售:10 个品类,每个品类 20 个商品
秒杀商品:
· 1000 个充电宝
· 12 台 iPhone12
日活用户 100 万
不能出错
技术: java
渠道:IOS、Android、微信小程序
单机房
要求:
1. 存储、负载聚恒、缓存、高可用、可扩展
分析:
假设:
· 参与秒杀活动用户增长为原来 5 倍,即 500 万
· 每个秒杀时间为 5 分钟,其中 40%秒杀流量集中在前三秒钟:QPS: 500 万*0.4/3 ≈ 700000
· 因为秒杀活动本身有很大的随机性,可以在客户端对部分用户直接返会结果。假设对 60%用户直接返回,则调整后的 TPS ≈ 280000
为了最大程度减少秒杀对其他业务的影响,建议将秒杀服务单独部署
服务拆分
存储
单台 Redis 最大 TPS=100000,因此需要 redis cluster 作为缓存方案,
秒杀商品较少,最终支付用户数据量较少,因此持久化数据存储采用 mysql 主备方案
将秒杀页面静态化,并提前缓存在客户端,同时将秒杀页面存储在 CDN
计算
QPS=280000,3~4 台 Nginx 即可。
秒杀应用服务器 30 台,每台 QPS=10000
负载均衡采用:轮询,保证各个服务器流量大致相同
高可用:在秒杀应用内,为了防止瞬时流量过高可以采用滑动窗口限流算法
架构图
其他
扩展:秒杀有单独服务器处理,避免影响正常页面,也方便后期秒杀业务扩展
评论