秒杀的业务场景分3个阶段,
1.准备预热阶段,用户不断的刷新页面查看秒杀是否开始
2.秒杀阶段,限时、限价、限量的销售,会产生瞬时的高并发流量
3.结算阶段,完成秒杀的数据工作,如:数据一致性、异常处理、商品回仓处理
准备阶段可以将商品、人员、库存 等数据进行redis热点缓存,页面静态化,尽量减少动态元素,
秒杀阶段的高并发通过限流、削峰、异步消息处理,限流方面,客户端进行限时提交、防止重复提交处理,
服务端的话,由于负载均衡层处理并发能力要强于应用层不少,像Nginx、redis分别能处理10万+、5万+的并发,而服务器如tomacat和数据库分别只有800、1000的并发,而像瞬时高并发流量并且大多数请求都属于无效请求,去扩展服务成本比较高,所以在负载均衡层进行库存限流比较好,在预热时redis缓存库存,
在nginx中执行lua脚本做库存预减校验,库存小于0直接返回秒杀结束,校验通过的发送MQ消息,再异步处理MQ消息,校验活动时间,是否黑名单,扣减缓存的秒杀库存,生成有效token,
结算阶段,客户端通过短轮询查询是否获得了有效token,即秒杀资格,获取到秒杀资格进行秒杀结算,结算验证token加入秒杀购物车,如果token失效,回滚缓存中的秒杀商品库存,最后提交订单,删除token,秒杀完成
网友评论