写点什么

架构实战营第 10 期毕业设计 - 秒杀系统

作者:Geek_4db2d5
  • 2023-03-22
    辽宁
  • 本文字数:1252 字

    阅读完需:约 4 分钟

作业要求:

【业务背景】

你作为一个电商创业公司的架构师,负责设计 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. 首先用户注册后登录系统 APP, 然后开始浏览商品信息。

  2. 用户进入秒杀商品页, 点击秒杀后

  3. 后台调用秒杀服务,检查剩余库存并扣减

  4. 如库存为零, 则秒杀失败

  5. 如扣减库存成功,进入支付环节。


秒杀系统的特点在于瞬时并发量大,秒杀时会有大量用户在同一时间进行抢购,瞬时流量激增。同时库存商品很少, 只有少量用户能成功购买。当然业务流程要尽可能简单,方便用户秒杀。


二 总体架构思路

  1. 性能估算

系统日活用户 100 万, 那么假设秒杀当日有 3 倍用户日活, 就是 300 万用户登录。 其中有 60%的用户参与秒杀,假设秒杀从预热开始共持续了 10 分钟。假设平均每人访问系统 10 次,下单 2 次。 那么整个秒杀过程中:

QPS:300 万*60%*10/600=30K

TPS:300 万*60%*2/600=6K


  1. 重点

  • 对于功能核心的秒杀服务, 采用异步操作,通过队列排队方式来控制。

  • 控制流量,在各个阶段进行限流。

  • 秒杀系统对于存储的要求非常高, 要保证存储系统的强一致性


三 存储架构设计

  1. 存储性能估算

   用户注册信息:系统日活 100 万, 那么假设总用户数估计是 5 倍左右, 即 500 万。

   商品信息:10 个品类, 每个品类 20 中商品, 共 200 个

   秒杀商品:1000 台充电宝 + 10 台 iPhone


  1. 登录信息和商品信息采用 mysql 主备架构

根据老师上课教授的存储架构选择逻辑,此处采用单机主备切换的方式



  1. 秒杀商品和订单信息采用 redis 处理



四 计算架构设计

1 负载均衡设计

根据之前计算出峰值的计算请求,采用 3 级负载均衡架构

QPS:300 万*60%*10/600=30K

TPS:300 万*60%*2/600=6K



2 缓存架构设计


采用四级缓存架构,

商品信息,图片等可以缓存在 app 缓存或者 WEB 容器缓存。

分布式缓存保存库存信息



3 高可用

采用如下方案保证接口的高可用性


  1. 限流机制

  • 请求段限流, 在用户客户端开始限流

  • 接入端限流,接到业务请求的时候限流

  • 微服务限流

  1. 排队机制


五 微服务及可扩展

技术团队以 java 为主,且已经落地了微服务架构,估计可能是 spring cloud 所以我们可以在此基础上进行微服务设计。


六 灾备

老板要求业务要万无一失, 考虑到目前只有一个机房,最好在同城再建一个机房, 这样至少可以抵御机房级别故障。


学习心得

通过毕业设计将老师教的内容串联起来, 大致了解了一个完整方案需要涉及哪些内容。但对每一部分感觉自己之后还需反复学习,深入研究。感谢华仔老师!

用户头像

Geek_4db2d5

关注

还未添加个人签名 2021-10-07 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营第10期毕业设计-秒杀系统_Geek_4db2d5_InfoQ写作社区