今天在公司 领取海洋馆的门票,想到了秒杀场景。
在学习了其他大咖的经验,现在总结如下:
秒杀中要限制流量,不能给后台服务器 数据库造成太大压力,同时业务上要保证商品不能少卖,也不能超卖。秒杀大多数是读多写少。比如12360 中某天某趟车次有2k张票,但是有10000K的并发量,在前端各种限流限频控制,实际上每次只让2k的请求最终hit到后台数据库,其他的告诉MQ中排队。
大概有三种方式。
1. 数据库乐观锁,使用版本号和状态机锁住表。(其中使用Thread类的sleep随机事件,达到防止冲突,削峰填谷的目的)
2,使用redis 或者memcached 的CAS机智。(不能用sychronized,因为它悲观锁)
3.使用token,只有拿到token的请求才能进入后台,落到数据锁住资源,同时每个token有过期时间,规定时间内不付款,就收回token,重新给排队的请求。(美其名曰 先买票再上车)