写点什么

架构实战营 - 毕业设计

作者:lucian
  • 2022 年 1 月 23 日
  • 本文字数:1199 字

    阅读完需:约 4 分钟

设计电商秒杀系统

【业务背景】

你作为一个电商创业公司的架构师,负责设计 6.18 大促秒杀系统的设计,你们的业务模式如下:

1. 你们挑选选品各大电商平台上畅销和好评的商品进行销售,每个品类不超过 20 个商品,目前做了 10 个品类;

2. 本次 6.18 秒杀选择了 1000 个充电宝,10 台 iPhone12 作为秒杀商品;

3. 正常的日活大约 100 万用户;4. 老板要求万无一失。

【技术背景】

1. 技术团队以 Java 为主,已经落地了微服务架构;

2. 主要渠道是自有的 App(包括 iOS 和 Android)和微信小程序,为了促进用户转化为 App 用户,只有下载 App 才能参加秒杀活动;

3. 目前只有单机房。

【毕设要求】

1. 设计完整的架构,例如存储、负载均衡、缓存、高可用、可扩展等;

2. 大约 10 页以内的 PPT,每页 PPT 说明一项设计,包括架构设计和设计理由,无需详细解释备选方案。

【提示】

1. 分析考虑要全面,但并不意味着架构设计要面面俱到,如果分析后认为某些设计点可以不做,就在作业最后统一说明原因即可;

2. 如果没有思路,请对照模块 9 的 IM 案例;

3. 如果有的信息觉得不够全或者不够细,可以做出一定的假设,但不能天马行空,需要对照已有的业务背景和技术背景进行合理推断。




  1. 存储采用 MySQL 集群+Redis Cluster

  2. MySQL 集群沿用现有电商系统,保存最终秒杀的订单记录,数据量同商品数量

  3. Redis Cluster 是秒杀系统的核心部分:

  4. 利用 Redis 的高效,秒杀开始前,商品库存预热保存在 Redis 里,减少库存的操作不经过 MySQL。

  5. 利用 Redis 的单线程处理的特点,采用漏桶限流算法,进行限流。

  6. 采用 Redis Cluster 来实现高可用。

  1. 原有电商系统只用 Nginx 作为网络接入负载,为了应对秒杀的高并发,新增 LVS 来做负载。

  2. 秒杀系统服务集群前同样配置 Nginx 作反向代理和负载均衡。

  3. LVS 对接入流量作区分,如果是秒杀请求,走秒杀服务集群;如果是正常业务请求,走原有的服务集群。

  4. 在秒杀高并发时保证正常业务的进行。

  1. 只有在 App 上才能参与秒杀活动,App 有缓存

  2. 秒杀活动页面的静态资源可以预先放在 CDN 缓存上面

  3. 分布式缓存采用 Redis Cluster,保存秒杀商品库存。


  1. 秒杀服务模块对接 Kafka,秒杀成功下单不直接记录数据库,而是推送到 Kafka。后续由订单服务模块从 Kafka 拿消息,异步处理订单,保存数据库

  2. 秒杀处理流程:

  3. 秒杀请求进来 Nginx,Nginx 从 Redis 获取令牌(预先放下商品数量相同的令牌)

  4. 如果不能获取,返回秒杀终止

  5. 获取成功,请求进入秒杀服务

  6. 秒杀服务作校验后(风控),从 Redis 获取库存

  7. 如果获取库存不成功(商品秒杀完),返回秒杀失败

  8. 如果获取成功,下单,信息保存在 Kafka

  9. 订单服务异步从 Kafka 获取下单信息,正式下单,保存订单数据

  10. 秒杀成功客户后续支付订单,完成秒杀。

  1. 采用动态 URL 的方式防止通过机器人自动抢秒杀商品,利用缓存保存动态 URL 信息,并设置有效时间为 60s。

  2. 秒杀系统都需要全链路压测,以保证线上的可用。

  3. 秒杀系统接入运维平台,监控秒杀活动是的流量情况。

  4. 做好熔断机制,万一秒杀活动影响到正常业务处理,能暂停秒杀活动。


用户头像

lucian

关注

还未添加个人签名 2018.03.13 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 - 毕业设计