写点什么

毕业设计 - 电商秒杀项目

  • 2022 年 8 月 28 日
    浙江
  • 本文字数:1248 字

    阅读完需:约 4 分钟

【业务背景】

你作为一个电商创业公司的架构师,负责设计 6.18 大促秒杀系统的设计,你们的业务模式如下:1. 你们挑选选品各大电商平台上畅销和好评的商品进行销售,每个品类不超过 20 个商品,目前做了 10 个品类;

2. 本次 6.18 秒杀选择了 1000 个充电宝,10 台 iPhone12 作为秒杀商品;3. 正常的日活大约 100 万用户;4. 老板要求万无一失。

【技术背景】

1. 技术团队以 Java 为主,已经落地了微服务架构;2. 主要渠道是自有的 App(包括 iOS 和 Android)和微信小程序,为了促进用户转化为 App 用户,只有下载 App 才能参加秒杀活动;3. 目前只有单机房。

【毕设要求】

1. 设计完整的架构,例如存储、负载均衡、缓存、高可用、可扩展等;2. 大约 10 页以内的 PPT,每页 PPT 说明一项设计,包括架构设计和设计理由,无需详细解释备选方案。

【提示】

1. 分析考虑要全面,但并不意味着架构设计要面面俱到,如果分析后认为某些设计点可以不做,就在作业最后统一说明原因即可;2. 如果没有思路,请对照模块 9 的 IM 案例;3. 如果有的信息觉得不够全或者不够细,可以做出一定的假设,但不能天马行空,需要对照已有的业务背景和技术背景进行合理推断。

业务基本场景

  1. 每个用户只有登录,获取 Access Token 才能进行访问页面

  2. 浏览畅销和好评商品页

  3. 获取秒杀商品详情页

  4. 秒杀开始,下单预扣库存

  5. 支付订单完成下单

架构设计思路

百万用户的架构设计思路如下:

  1. 静态数据量不是很大,如用户数据,采用 mysql 存储

  2. 大量的查询请求是秒杀的核心性能挑战, 采用 redis cluster 来做秒杀商品的缓存

  3. 要求对秒杀商品的库存刚好卖光,不出现超卖,少买。 采用先下单预扣库存的方式,来避免超卖和少卖

  4. 采用三级负载 2 台 Nginx/LVS

  5. 拆分成 5 个微服务:登录,商品,秒杀,订单,支付

  6. 采用同城双中心来保证负载高可用

  7. 利用 Clickhouse / Pinot 来做大数据分析

存储设计

存储数据估算

【登录】UV = 100 万

【商品】20 * 10 品类 = 200

【商品库存】与商品数相同

【秒杀商品库存】1000 个充电宝 + 10 台 iphone = 1010

【订单】100 万* 10%(假设每天有 10%的用户下单)=10 万

【订单详情】10 万 * 5(假设每单平均包含 5 个商品)= 50 万

【支付】 ~订单数

存储架构

100 万用户数据,10 万订单数据,50 万订单详情数据,10 万支付单数据

秒杀商品数据,秒杀上平库存数据

计算设计

计算数据估算

【浏览商品】QPS: 100w * 10 / 3600s/ 24h = 115 qps

【秒杀商品】QPS: 100w*20%(假设 20%的活跃用户参加秒杀)*1s= 20w/s

业务流程


计算架构设计

负载均衡

缓存设计


  • APP 缓存: 提前缓存详情页和秒杀页的图片,HTML

  • CDN 缓存:保存秒杀页静态资源,就近获取,不用把静态资源流量打到自身服务器上

  • 应用内缓存:存储预分配库存数据

  • 分部署缓存:存储商品真实库存


微服务设计

秒杀服务

  • 如果不做限流,需要支持 20w 的 QPS,假设每个节点承载 500 请求数,需要 20w/500 = 400 台,从成本上考量是无法接受的

  • 如果采取限流措施,在网关对 IP 和 UserId 做限流,在应用内部利用令牌桶算法限制并发数在 500 一个节点,基于秒杀商品的数量 1010 个, 我们使用三个秒杀服务节点

高可用设计


发布于: 刚刚阅读数: 6
用户头像

还未添加个人签名 2018.02.08 加入

还未添加个人简介

评论

发布
暂无评论
毕业设计 - 电商秒杀项目_阿拉阿拉幽幽_InfoQ写作社区