写点什么

架构实战营模块九作业 - 毕业设计

用户头像
子豪sirius
关注
发布于: 刚刚

设计电商秒杀系统

设计方案




  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. 做好熔断机制,万一秒杀活动影响到正常业务处理,能暂停秒杀活动。


用户头像

子豪sirius

关注

还未添加个人签名 2018.05.03 加入

还未添加个人简介

评论

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