经典秒杀问题

本文探讨了高并发秒杀场景下如何优化系统设计,包括使用CDN减轻服务器压力,秒杀系统独立部署,时间控制防止作弊,以及利用MQ进行削峰。通过Redis实现库存扣减避免超卖,并结合MQ确保交易的唯一性。此外,还讨论了如何通过限制请求和数据库操作来过滤无效请求,提高系统的稳定性和效率。
摘要由CSDN通过智能技术生成

就像tb、jd的抢购一样,我们只有有限的商品和相对较大的人数,在某个时刻集中进行访问。

要求一个商品不能卖给两个人;相对公平、让提交早的人能抢到商品。

首先我们来考虑秒杀页面的问题

秒杀页面中会有一些图片、视频等相对较大的静态资源,如果存储在服务器中的话,假如资源有500K,两万个人来同时访问,就会消耗10G的流量,服务器肯定是承担不起的。

这时我们可以将图片、视频分配在CDN(内容分发网络)中。这样请求页面时,就不会直接到服务器中进行请求,会从就近的服务节点上进行请求。

其次秒杀系统应该单独部署,当这个服务器挂掉时,不影响其他服务器的使用。

还应该有时间的控制,不然通过改电脑时间,或者网页上的简单代码修改被提前抢购就不好了。

另外还有资源消耗的问题,假如有几万个人去抢购5台机器,这时大部分的请求是没必要交给后台的,所以可以设定在几十秒后,很多请求可以直接返回请求失败。

在首次过滤掉大量请求后,还是会有大量请求返回到服务器中。假如一台服务器每秒只能处理500次请求,这时又有几万条的数据进来。我们就不得不用上MQ的削峰来处理这个问题

使用MQ后,假如存到MQ就直接返回抢购成功,在高并发的情况下,可能会出现几个人同时抢到同一件物品。那么如何防止这种情况的发生呢?

可以用redis来做库存扣减,每消费一次就减一,为0后直接返回后面的请求失败。这样再次过滤掉大量请求,不过这样也无法防止超卖的发生。我们可以将这些请求重新封装消息放入MQ中,这之后才真正的从数据库中去进行商品秒杀的扣减。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值