mysql 乐观锁 超卖_商城秒杀之超卖问题的解决思路

1 秒杀有哪些特点

常见的场景比如100000人在同一秒抢一个手机。比如12:00:00抢购, 12:00:01活动就结束了

1.1 突然多了很多访问,可能导致原有商城瘫痪

秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。

解决方案:将秒杀系统独立部署,独立域名。

1.2 带宽问题

假设商品页面大小1M(主要是商品图片大小),那么10000用户并发,需要的网络带宽是:10G(1M×10000),这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。

解决方案:因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口带宽。

1.3 有大部分请求不会生成订单

接入层(nginx)漏桶限流。真正进入php和mysql等应用层的流量极少,大多被过滤

1.4 超卖问题

秒杀商品的数量是有限的。

c230820cea3a3dfaad241e63d5e29fac.png

上面这个是会超卖的,不并发的时候是可以的, 万一并发,2个人都会抢购成功

2、超卖问题解决思路:

我们这里使用 nginx+lua+redis乐观锁代码 实操解决,如下:

第一步:搭建redis集群,我们这里,在192.168.188.130 这台机器上,使用docker搭建redis集群:

a00fe1ce0cf0130fb1509f70bb6194e1.png

如上图 ,我们新建了redis集群且模拟设置了 乐观锁参数:set watch_key 1000 方便后续测试 和商品库存 :set sku_num 1。

第二步:在另一台机器上新建nginx+lua 环境:这里,我们在192.168.188.131 机器上搭建:如下为主要nginx配置信息:

54cae7a071583c5b70addc320acbb14f.png

如果下为lua 文件的主要配置,主要通过3层防护来保证超卖问题的解决::redis 集群、漏桶算法、redis 乐观锁,如下所示:

700a71bd5a3fa40c19a4c5e7c9a2c831.png

ec9ac44d7f87e7a8d15218a250e1a760.png

a2c97870b990c9fe501911cc17c33f57.png

3、jmeter 压测检验;

83c5140d6808f68cadf1498e675d1c72.png

6f32ad714ba798190a58ea66086ff1d8.png

b8bd5962a909730cde573f9a8eccf865.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值