电商秒杀系统设计
业务背景
你作为一个电商创业公司的架构师,负责设计 6.18 大促秒杀系统的设计,你们的业务模式如下:
1. 你们挑选选品各大电商平台上畅销和好评的商品进行销售,每个品类不超过 20 个商品,目前做了 10 个品类;
2. 本次 6.18 秒杀选择了 1000 个充电宝,10 台 iPhone 12 作为秒杀商品;
3. 正常的日活大约 100 万用户;
4. 老板要求万无一失。
技术背景
1. 技术团队以 Java 为主,已经落地了微服务架构;
2. 主要渠道是自有的 App(包括 iOS 和 Android)和微信小程序,为了促进用户转化为 App 用户,只有下载 App 才能参加秒杀活动;
3. 目前只有单机房。
对前面的业务背景描述,进行核心业务场景假设,秒杀系统核心系统包括:
日活 100W 的系统,假设日活用户占 10%,注册用户有 100/10% = 1000W
正常售卖商品数:10 个品类,每个品类不超过 20 个商品,总商品数目为:10*20=200 个商品,假设定期会对这些热销和好评的商品进行更新,更新评率为每周更新所有 200 个商品,为满足未来 2 年的增长,200*52*2=20000+商品
由于秒杀系统仅 618 使用,因此无需隔离热点商品信息,如后续需要演进为每日秒杀的系统,则可以做单独的热点商品存储和正常商品隔离
假设每个上架的商品都是有库存的,库存记录数大致 20000+
秒杀库存,是否需要设计隔离的热点商品库存也看是否会演进每日秒杀的系统
假设该电商系统 100W 日活用户,实际每日下单的用户占 50%,每日产生 50W 订单,满足未来 2 年增长 365*2*50=3.65 亿订单数据
假设下单的用户都进行了支付,少量因为订单因为各种填写错误等原因未支付的订单,因此支付账单约 3.65 亿
数据特点分析:
根据上面的分析,存储架构设计包括
采用多级负载均衡架构
采用多级缓存架构设计
1.CDN 缓存静态商品信息,拦截大部分商品 QPS
2.APP 端缓存,秒杀预告预先放出了商品信息,可缓存部分资源到 APP 内部缓存
3.应用程序本地缓存,可存商品信息等
4.分布式缓存 RedisCluster 集群,存储用户信息,商品信息,秒杀限流任务队列