架构实战营第 10 期毕业设计 - 秒杀系统
作业要求:
【业务背景】
你作为一个电商创业公司的架构师,负责设计 6.18 大促秒杀系统的设计,你们的业务模式如下:
1.你们挑选选品各大电商平台上畅销和好评的商品进行销售,每个品类不超过 20 个商品,目前做了 10 个品类;
2.本次 6.18 秒杀选择了 1000 个充电宝,10 台 iPhone 12 作为秒杀商品;
3.正常的日活大约 100 万用户;
4.老板要求万无一失。
【技术背景】
1.技术团队以 Java 为主,已经落地了微服务架构;
2.主要渠道是自有的 App(包括 iOS 和 Android)和微信小程序,为了促进用户转化为 App 用户,只有下载 App 才能参加秒杀活动;
3. 目前只有单机房
【毕设要求】
设计完整的架构,例如存储、负载均衡、缓存、高可用、可扩展等;
大约 10 页以内的 PPT,每页 PPT 说明一项设计,包括架构设计和设计理由,无需详细解释备选方案
一 业务场景
首先用户注册后登录系统 APP, 然后开始浏览商品信息。
用户进入秒杀商品页, 点击秒杀后
后台调用秒杀服务,检查剩余库存并扣减
如库存为零, 则秒杀失败
如扣减库存成功,进入支付环节。
秒杀系统的特点在于瞬时并发量大,秒杀时会有大量用户在同一时间进行抢购,瞬时流量激增。同时库存商品很少, 只有少量用户能成功购买。当然业务流程要尽可能简单,方便用户秒杀。
二 总体架构思路
性能估算
系统日活用户 100 万, 那么假设秒杀当日有 3 倍用户日活, 就是 300 万用户登录。 其中有 60%的用户参与秒杀,假设秒杀从预热开始共持续了 10 分钟。假设平均每人访问系统 10 次,下单 2 次。 那么整个秒杀过程中:
QPS:300 万*60%*10/600=30K
TPS:300 万*60%*2/600=6K
重点
对于功能核心的秒杀服务, 采用异步操作,通过队列排队方式来控制。
控制流量,在各个阶段进行限流。
秒杀系统对于存储的要求非常高, 要保证存储系统的强一致性
三 存储架构设计
存储性能估算
用户注册信息:系统日活 100 万, 那么假设总用户数估计是 5 倍左右, 即 500 万。
商品信息:10 个品类, 每个品类 20 中商品, 共 200 个
秒杀商品:1000 台充电宝 + 10 台 iPhone
登录信息和商品信息采用 mysql 主备架构
根据老师上课教授的存储架构选择逻辑,此处采用单机主备切换的方式
秒杀商品和订单信息采用 redis 处理
四 计算架构设计
1 负载均衡设计
根据之前计算出峰值的计算请求,采用 3 级负载均衡架构
QPS:300 万*60%*10/600=30K
TPS:300 万*60%*2/600=6K
2 缓存架构设计
采用四级缓存架构,
商品信息,图片等可以缓存在 app 缓存或者 WEB 容器缓存。
分布式缓存保存库存信息
3 高可用
采用如下方案保证接口的高可用性
限流机制
请求段限流, 在用户客户端开始限流
接入端限流,接到业务请求的时候限流
微服务限流
排队机制
五 微服务及可扩展
技术团队以 java 为主,且已经落地了微服务架构,估计可能是 spring cloud 所以我们可以在此基础上进行微服务设计。
六 灾备
老板要求业务要万无一失, 考虑到目前只有一个机房,最好在同城再建一个机房, 这样至少可以抵御机房级别故障。
学习心得
通过毕业设计将老师教的内容串联起来, 大致了解了一个完整方案需要涉及哪些内容。但对每一部分感觉自己之后还需反复学习,深入研究。感谢华仔老师!
评论