流量控制技术
由于秒杀时,流量巨大,而有效流量很小,需要做到尽量把请求控制在前端,通过层层过滤,达到放行到后台的请求数与秒杀商品库存数一致。
常见的系统架构(前端、nginx、后台服务及数据层)及流量层层筛选,这与我们实际生活中地铁高峰期的限流措施是不谋而合的,都是逐层限流,尽量把请求流(人流)拦截在前端,减少后一层的压力,如下图所示:
缓存处理
缓存技术是实现高性能架构的基石,在秒杀系统中,需要把需要秒杀的商品信息、商品库存及秒杀订单都缓存起来,在用户查询时,不需要再去数据库查询,提升系统性能。
预扣库存
秒杀系统控制库存预扣预存,即:扣减缓存中的商品库存,扣减失败,立即返回,扣减成功,通过发送消息到消息服务器实现异步下单。
预扣库存流程:先判断库存是否足够,足够再扣减库存,这两部操作需要原子化,lua脚本具有原子性,可以通过redis + lua脚本来实现。