面试系统架构7-如何实现一个秒杀系统,保证只有几位用户能买到某件商品

本文探讨了秒杀系统的设计与实现,包括前端限流、后端隔离、使用队列解耦下单与订单生成,以及多种用户体验优化策略,如倒计时提示与订单状态轮询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计这个系统是一个考虑全面的问题,可以发散出很多问题,考察很多方面,不是仅仅回答通过redis的自减操作完成

比如简单的方案:

1,页面开启倒计时,要保证不能把下单接口暴露过早暴露出来,防止机器刷下单接口

2,前端限流,比如nginx对下单接口限流,命中限流则返回302到秒杀页

3,后端单独部署,独立域名和nginx,与线上正常运行的系统隔离开来,避免影响到线上环境

4,由于生成订单操作比较耗时,采用队列的方式来解耦下单成功和生成订单,针对进入后端的请求,采用redis自减,针对自减结果>0的请求则认为下单成功,触发一个生成订单的消息,然后立即返回给用户结果

5,用户方面,针对秒杀成功有两种处理方式

  a,用户端收到秒杀成功的结果,则开启提示页面,并进入倒计时,倒计时时间为订单生成的预估时间

  b,秒杀成功后,给当前用户在redis中生成一个订单生成状态的标识,用户端开启提示页面,loading,并轮询后端订单生成状态,生成成功之后让前端跳转到订单页面

6,订单服务订阅下单系统发送的消息,并开始生成订单,生成订单成功之后更新redis中用户秒杀订单的状态为已生成订单

 

系统应该有页面和接口

页面用于展示用户界面,接口用于获取数据

界面:秒杀页面,秒杀成功页面,秒杀失败页面,命中限流页面(查看订单页面不算秒杀系统的功能)

接口:秒杀下单接口,秒杀成功获取订单生成状态接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值