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 超卖问题
秒杀商品的数量是有限的。
上面这个是会超卖的,不并发的时候是可以的, 万一并发,2个人都会抢购成功
2、超卖问题解决思路:
我们这里使用 nginx+lua+redis乐观锁代码 实操解决,如下:
第一步:搭建redis集群,我们这里,在192.168.188.130 这台机器上,使用docker搭建redis集群:
如上图 ,我们新建了redis集群且模拟设置了 乐观锁参数:set watch_key 1000 方便后续测试 和商品库存 :set sku_num 1。
第二步:在另一台机器上新建nginx+lua 环境:这里,我们在192.168.188.131 机器上搭建:如下为主要nginx配置信息:
如果下为lua 文件的主要配置,主要通过3层防护来保证超卖问题的解决::redis 集群、漏桶算法、redis 乐观锁,如下所示:
3、jmeter 压测检验;