模块九作业 - 设计电商秒杀系统
【业务背景】
你作为一个电商创业公司的架构师,负责设计 6.18 大促秒杀系统的设计,你们的业务模式如下:
1. 你们挑选选品各大电商平台上畅销和好评的商品进行销售,每个品类不超过 20 个商品,目前做了 10 个品类;
2. 本次 6.18 秒杀选择了 1000 个充电宝,10 台 iPhone 12 作为秒杀商品;
3. 正常的日活大约 100 万用户;
4. 老板要求万无一失。
【技术背景】
1. 技术团队以 Java 为主,已经落地了微服务架构;
2. 主要渠道是自有的 App(包括 iOS 和 Android)和微信小程序,为了促进用户转化为 App 用户,只有下载 App 才能参加秒杀活动;
3. 目前只有单机房。
【毕设要求】
1. 设计完整的架构,例如存储、负载均衡、缓存、高可用、可扩展等;
2. 大约 10 页以内的 PPT,每页 PPT 说明一项设计,包括架构设计和设计理由,无需详细解释备选方案。
【提示】
1. 分析考虑要全面,但并不意味着架构设计要面面俱到,如果分析后认为某些设计点可以不做,就在作业最后统一说明原因即可;
2. 如果没有思路,请对照模块 9 的 IM 案例;
3. 如果有的信息觉得不够全或者不够细,可以做出一定的假设,但不能天马行空,需要对照已有的业务背景和技术背景进行合理推断
1 存储架构设计
1.1 存储性能估算
用户数量:日活 100 万用户, 估算总用户数为日活的 3 倍,总注册用户数大约为 300 万用户
订单数量:30%日活用户进行下单,每日订单数据大概为 30 万
商品数量:10 个品类, 每个品类不超过 20 个商品,总共商品数约为 200
秒杀库存数:1000 个充电宝,10 台 iPhone 12,这两个商品数热点库存
秒杀成功订单记录数:1000 + 10 = 1010
秒杀参与人数:假设大约有 70%用户参与秒杀活动,预计 200 万
秒杀峰值:
秒杀前 1 分钟内,商品浏览量请求达到峰值
秒杀开始 1 分钟内,秒杀抢购请求达到峰值,但实际只有 1010 的请求能够成功处理,大部分请求不能抢购成功(库存扣减压力较大)
1.2 存储架构
用户数据 + 订单数据 + 商品数据 mysql 存储
秒杀存储扣减压力较大,考虑使用 Reids Cluster 存储秒杀商品库存
2 计算架构设计
2.1 计算性能估算
注册:每日新增注册不足 1 万,可忽略
登录:在秒杀开始前,大部分用户都已登录,假设在秒杀开始前 4 个小时,都已完成登录,登录 TPS 均值 2000000 / 4 / 3600 = 140
浏览商品:假设 200 万人中,在秒杀开始前 1 分钟内,浏览达到峰值,每个人都在 1 分钟内进行商品浏览一次,峰值 QPS 为 2000000 / 60 = 35000
商品秒杀:假设 200 万人中,在秒杀开始后 30s 内,秒杀达到峰值,峰值 TPS 为 2000000 / 30 = 70000
2.2 计算架构之负载均衡
秒杀峰值 TPS+QPS 为 10 万, 采用 LVS 进行负载均衡处理
2.3 计算架构之缓存架构
缓存,主要缓存商品相关信息,减少查询数据库的压力,可使用 redis 缓存, web 容器缓存何 app 缓存进行处理
3 可扩展架构设计
为了保证秒杀活动和其他业务不相互影响,将秒杀服务单独隔离部署,秒杀服务单独处理秒杀商品逻辑,并且是在 redis 中进行库存的扣减,扣减成功后,才进行到订单服务中进行订单处理
4 高可用设计
由于日活达到 100 万,并且业务也在稳步推进,目前单机房的部署方案,已不能满足高可用的需求,因此需要进行多机房部署演进,暂时先考虑同城灾备方案,后根据业务发展需求,进行同城双活的演进
评论