架构训练营毕业设计—电商秒杀系统
设计电商秒杀系统
【业务背景】
你作为一个电商创业公司的架构师,负责设计 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、可以从自有 App(包括 iOS 和 Android)和微信小程序注册登录,购买商品;
2、用户即使不登录也可以浏览商品;
3、秒杀活动只能通过登录自有 App 参加,微信小程序上能看到秒杀活动介绍,但是提示需下载 APP 参与;
4、秒杀采用“拍下减库存”的方式,对用户体验会好些;
5、秒杀一般是定时上架,用户可以看到该商品,但是无法点击“立即购买”的按钮,秒杀开始前用户会快速刷新商品页面,访问量很大,在秒杀开始的时候抢先进入下单页面;
6、秒杀时,只有用户提交的第一个订单发送给网站的订单子系统;
7、秒杀活动是一种营销手段,不能影响商城的日常应用。
二、存储架构设计
1、秒杀系统存储性能估算
【注册】
日活大约 100 万用户,假设日活占用户总数的 20%,则实际用户约为 500 万,假设秒杀活动吸引 10 万新用户注册。
【登录】
日活大约 100 万用户,假设秒杀活动吸引 200 万用户参加,则需要存储 200 万条用户的登录信息。
【商品信息】
需要存储的商品有( 10 个品类 )*(每个品类不超过 20 个) = 200 条。
参与秒杀的用户会快速刷新商品页面,假设每个用户刷新 10 次,则商品信息的请求次数是 200 万*10=2000 万。
【订单】
秒杀商品有( 1000 个充电宝)+ (10 台 iPhone 12) = 1010 个,所以秒杀订单有 1010 条。
假设当天的用户平均有 1 条订单,则当天的订单数据有 200 万 条,每个用户查询订单 2 次,则有 400 万 条订单查询请求。
2、存储架构设计
三、计算架构设计
1、秒杀系统计算性能估算
【注册】
假设秒杀活动吸引 10 万新用户注册。
【登录】
假设 200 万用户参加,集中在秒杀前 1 小时登录,则登录 TPS 均值:200 万 /3600 = 556。
【商品信息】
参与秒杀的用户会快速刷新商品页面,假设每个用户刷新 10 次,且集中在秒杀前 1 小时,
则查看商品信息的 QPS 是 200 万*10/60*60 = 5556。
【订单】
每个用户发出一个秒杀订单请求,假设集中在秒杀开始后的 5s 内,则秒杀订单请求的 TPS=200 万/5=40 万。
由于秒杀商品只有 1010 个,最终有效的秒杀订单只有 1010 条。
假设当天的用户平均有 1 条订单,则当天的订单数据有 200 万 条,假设订单集中在秒杀开始前 1 小时,
则生成订单的 TPS = 200 万/3600 = 556。
假设用户在秒杀结束后 1 小时内查询订单 2 次,则订单查询请求的 TPS=200 万*2/3600=1111。
2、计算架构之负载均衡
3、计算架构之缓存架构
【下载 App】
假设参加秒杀活动的用户中有 10%没有下载过 App(大小为 50MB),且集中在秒杀开始前 1 小时下载,则需要的带宽为 20 万*50MB/3600s=2778MB/s,用 CDN 缓存。
【秒杀页面】
秒杀前,用户会不断刷新秒杀页面,造成大量页面请求,为了减轻服务端的压力,秒杀页面一般设计成静态页面,跟普通的商品详情页分开,缓存在 App、CDN 上。这样刷新秒杀页面产生的请求,只有少部分动态验证请求到达服务端,减轻了服务端的压力。
四、高可用架构设计
1. 秒杀活动非常态,是一种营销手段,持续时间短,但是会产生比平时大数十倍的页面访问流量和下单流量,如果将秒杀活动和商城的普通应用部署在一起,可能会对日常业务造成冲击,为了提高可用性,
可以将秒杀系统独立部署,甚至使用独立域名,使其完全隔离。
2.由于秒杀请求的 TPS 非常大,可以使用排队架构,收到请求后并不立即处理,而是将请求放入队列,系统根据能力异步处理。
五、可扩展架构设计
技术团队以 Java 为主,已经落地了微服务架构,可以选择 Spring Cloud 作为微服务基础框架。
评论