极客时间【架构实战营】第二期 毕业设计
设计电商秒杀系统
【业务背景】
你作为一个电商创业公司的架构师,负责设计 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. 如果有的信息觉得不够全或者不够细,可以做出一定的假设,但不能天马行空,需要对照已有的业务背景和技术背景进行合理推断。
基本业务场景
注册登录:正常的日活大约 100 万用户
支付:可使用第三方支付接口(如微信、支付宝等)
商品信息:挑选各大电商畅销的 10 个品类,每个品类不超过 20 个商品,共计 200 个商品
秒杀活动:1000 个充电宝,10 台 iPhone 12
订单:查询已购买商品信息
存储性能估算
注册:百万用户注册信息。
登录:百万注册用户,每天活跃用户有 40%,登录时读取用户信息是每天 40 万。
商品:每天 40 万登录用户,假设每位登录用户平均查看 50 个商品,每天查看商品信息是 2000 万次。
订单:每天 40 万登录用户,假设每位用户查看最近的 10 个订单数据,每天查看订单 400 万次。
存储架构设计
用户注册信息、商品信息、订单等数据使用 MySQL 主备分库分表进行保存。
计算性能估算
注册:日增用户数量可以忽略。
登录:百万注册用户,每天活跃用户有 40%,登录时读取用户信息是每天 40 万,假设登录时间集中在早晚 4 小时,登录 TPS:40 万 / 14400 = 30。
商品:每天 40 万登录用户,假设每位登录用户平均查看 50 个商品,每天查看商品信息是 2000 万次,假设登录查看时间集中在早晚 4 小时,查看商品的 TPS:2000 万 / 14400 = 1500。
订单:每天 40 万登录用户,假设每位用户查看最近的 10 个订单数据,每天查看订单 400 万次。假设登录查看时间集中在早晚 4 小时,查看订单的 TPS 均值:400 万 / 14400 = 300。
秒杀:可以采用漏桶算法对请求进行限流,应对秒杀瞬时高并发。
计算架构设计
使用 2 台 Nginx/LVS 负载均衡,可以支持大约 40000 的 TPS/QPS,满足性能估算需求,有性能余量,并支持负载均衡高可用。
缓存架构设计
采用 3 级缓存架构:APP 缓存、WEB 容器缓存、分布式缓存
高可用架构设计
为了满足业务高可用复杂度,采用同城双中心架构设计
毕业总结
目前虽然在从事计算机相关的工作,但工作中几乎没有软件开发的内容,也没有相关的业务需求。因此老师讲的很多内容和知识都是第一次听。好在老师讲解的很细致,也有对应的例子说明为什么这样做。回顾整个课程,确实提升了不少,扩大了知识的广度,受益匪浅。希望其中的一些设计思想能够对未来的工作起到指导作用。
评论