写点什么

模块九作业 - 设计电商秒杀系统

作者:smile
  • 2022 年 5 月 14 日
  • 本文字数:1321 字

    阅读完需:约 4 分钟

【业务背景】

你作为一个电商创业公司的架构师,负责设计 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 万,并且业务也在稳步推进,目前单机房的部署方案,已不能满足高可用的需求,因此需要进行多机房部署演进,暂时先考虑同城灾备方案,后根据业务发展需求,进行同城双活的演进

5 整体架构设计图



用户头像

smile

关注

还未添加个人签名 2021.04.07 加入

还未添加个人简介

评论

发布
暂无评论
模块九作业 - 设计电商秒杀系统_架构实战营_smile_InfoQ写作社区