场景
假设我们一台服务器的数据库只能承受两万人的并发,现在我们的并发达到了十万,我们该如何解决这个问题呢?
不能使用负载均衡
我们的整个站点只有这一个高并发,而且这个告别发也只是临时的,活动完成之后就没了,那么我们仅仅为了这个活动去加服务器,去做负责均衡是不合适的,性价比太低了,只能代码解决了、
一 ,减少请求
可以预知的是,用户为了抢这个商品,一定会疯狂的点击下单按钮,那么就会对服务器造成大量多余的请求。解决办法是点击下单按钮之后,让这个按钮变为不可点击,并且使用本地缓存,记录用户已经下单,防止刷新页面后继续下单。这样,十万请求也就变成了三四万。
二,数据库锁
在下单之前,先查询一下库存,有库存再下单,保证数据的正确,避免出现只有100个商品,下单1000条。
三,服务端限制请求次数
因为我们前端做了限制,但是不可避免的会有一些人走其他途径下单,例如模拟http模拟请求,针对这些人只能服务端做限制了。
四,令牌机制
活动开启之前,加入我们有100个秒杀商品,那么我们生成100个令牌,那么前一百个用户拿到了令牌,才有资格去访问数据库、下单,这样以来数据库压力几乎没有了。而其他的用户,直接会被告知,抢完了,程序的压力也会骤降。
’