架构实战营模块九作业 - 毕业设计
设计电商秒杀系统
设计方案
存储采用 MySQL 集群+Redis Cluster
MySQL 集群沿用现有电商系统,保存最终秒杀的订单记录,数据量同商品数量
Redis Cluster 是秒杀系统的核心部分:
利用 Redis 的高效,秒杀开始前,商品库存预热保存在 Redis 里,减少库存的操作不经过 MySQL。
利用 Redis 的单线程处理的特点,采用漏桶限流算法,进行限流。
采用 Redis Cluster 来实现高可用。
原有电商系统只用 Nginx 作为网络接入负载,为了应对秒杀的高并发,新增 LVS 来做负载。
秒杀系统服务集群前同样配置 Nginx 作反向代理和负载均衡。
LVS 对接入流量作区分,如果是秒杀请求,走秒杀服务集群;如果是正常业务请求,走原有的服务集群。
在秒杀高并发时保证正常业务的进行。
只有在 App 上才能参与秒杀活动,App 有缓存
秒杀活动页面的静态资源可以预先放在 CDN 缓存上面
分布式缓存采用 Redis Cluster,保存秒杀商品库存。
秒杀服务模块对接 Kafka,秒杀成功下单不直接记录数据库,而是推送到 Kafka。后续由订单服务模块从 Kafka 拿消息,异步处理订单,保存数据库
秒杀处理流程:
秒杀请求进来 Nginx,Nginx 从 Redis 获取令牌(预先放下商品数量相同的令牌)
如果不能获取,返回秒杀终止
获取成功,请求进入秒杀服务
秒杀服务作校验后(风控),从 Redis 获取库存
如果获取库存不成功(商品秒杀完),返回秒杀失败
如果获取成功,下单,信息保存在 Kafka
订单服务异步从 Kafka 获取下单信息,正式下单,保存订单数据
秒杀成功客户后续支付订单,完成秒杀。
采用动态 URL 的方式防止通过机器人自动抢秒杀商品,利用缓存保存动态 URL 信息,并设置有效时间为 60s。
秒杀系统都需要全链路压测,以保证线上的可用。
秒杀系统接入运维平台,监控秒杀活动是的流量情况。
做好熔断机制,万一秒杀活动影响到正常业务处理,能暂停秒杀活动。
评论