毕业设计
设计电商秒杀系统
【业务背景】
你作为一个电商创业公司的架构师,负责设计 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. 分级--独立部署
a) 热销商品:10 个品类*20 个商品=总参加商品数量 200 个
b) 秒杀商品
2. 正常日活 100 万,活动期间至少增长 2 倍
3. 用户数量
活动预热期间:每日新增 20 万用户,共 5 天增加 100 万。
当天参加活动的人数为:
正常日活 100 万*10% + 新增 100 万*20% = 30 万
活动当天日活人数为:
正常日活 100 万 + 新增 100 万*50% = 150 万
二、架构设计
a) 热销商品
QPS: 共 200 个商品。150 万人参加,每次查看 10 个商品,且 80%的请求发生在 5 小时内,则 QPS = 150W*10*0.8/5/3600 = 666
b) 秒杀商品
QPS:100 万人参加这个活动,每个人查看商品 3 次,秒杀请求发生在 1 分钟内。则 QPS = 100W*3/60=5000
TPS:最后 5 秒请求服务器,每人 2 次,则 TPS = 100W*2/5=40W
排队限流设计:提前下发令牌,减小秒杀时候后台压力
三、存储设计
a) Mysql 做主备就行了,保持用户数据+订单数据
b) 库存用 redis cluster,秒杀的时候 TPS 超过 redis 单机性能(5-10 万),所以使用 redis cluster。
四、负载设计
从人数来看,是初创企业用 F5 有点奢侈,用 LVS 就行了
五、缓存设计
使用三级缓存--客户端缓存+web 缓存+分布式缓存
a) 使用 CDN+客户端缓存+web 缓存把静态页面存起来
b) 客户端秒杀开始的前 2 天就可以在用户打开 APP 的时候,在后台下载到本地(提前预热)
c) 秒杀页面做成静态的也缓存起来
d) 热销商品和秒杀商品,使用 redis 保存库存,分布式缓存使用 redis,为应对大流量,redis 采用 redis cluster 方式部署。
六、高可用设计
老板要求万无一失,可以使用就近双机房(使用云就行了)。只要保存关键数据就行,只要保存用户数据和订单数据。
七、可扩展设计
12 个后台来开发这个项目,根据三个火枪手原则,分 4 个服务
评论