写点什么

架构实战营 毕业设计项目

用户头像
李东旭
关注
发布于: 刚刚
架构实战营 毕业设计项目

架构实战营 毕业设计项目 模块九作业


设计电商秒杀系统

业务背景

你作为一个电商创业公司的架构师, 负责设计 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) 日活 100 万用户, 及时考虑秒杀活动有新用户参加, 应该不会超过 300 万, 考虑到充电宝和 iPhone 手机, 在市场也能买到, 预估参与用户 300 万

2) 秒杀有 10 个品类, 每个品类不超过 20 个商品, 这个对秒杀商品可扩展性提出了一些基本要求, 秒杀页面不能完全使用一个固定的 HTML 页面, 可以考虑为每个商品独立设计一个或多个页面, 品类对秒杀活动影响不大

3) 本次 秒杀 1000 个充电宝 和 10 个 iPhone 手机, 秒杀成功用户 使用 Redis 存储即可

4) 老板要求万无一失, 在一个机房要求万无一失, 一般是接入多条专线. 当单一主干网络掉线后, 其余主干网可以及时响应. 一般 2-3 条主干网专线即可. 现在有个机房托管支持多个主干网运营商, 或者单一主干网运营商多条线路. 在服务器层面, 每个服务器配置多个网卡, 当机房内交换机, 出现故障时, 可以使用备用交换机.


接入网络高可用设计

接入主干网才有多条专线, 机房路由器、机房交换机至少有两组, 每组同时接入不同专线。

服务器接入不同交换机。



存储高可用设计

Redis 使用 sentinel 机制, MySQL 使用主从复制, 秒杀商品同时写入 Redis 和 MySQL.


整体架构



CDN

将秒杀页面缓存到 CDN, 用户直接下载 HTML


负载均衡

秒杀系统, 通过负载均衡对外提供服务, 解决单点问题


缓存

秒杀页面动态信息和秒杀结果直接缓存在 Redis 中

如果页面访问过多, 可以直接缓存在秒杀服务中, 定期从 Redis 更新


存储

使用消息中间件存放所有秒杀请求, 例如把请求信息存放到 Kafka 中

秒杀服务异步从消息中间件获取秒杀信息, 判断用户是否秒杀成功. 秒杀成功用户同时存放在 Redis 和 MySQL 中, 直到秒杀名额填满


扩展

扩展新商品秒杀时, 将新的秒杀页面推送到 CDN. 在 MySQL 中和 Redis 提前预热秒杀相关数据


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

李东旭

关注

还未添加个人签名 2021.04.12 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 毕业设计项目