电商秒杀系统设计思路

所谓秒杀系统,众所周知秒杀的特点就是瞬间的访问流量很高,如果这些访问流量直接打到数据库的话,以数据库的瓶颈肯定会崩溃,所以关键是如何拦截无效的流量,这里分两大块,前端页面,后台服务器。

一、前端

1. 限流,点击提交按钮后通过js按钮置灰,显示为正在处理中,能处理结束或若干秒后,才允许用户点击
2. 页面静态化,将商品详情页面做成静态页面,不经过后台的处理,直接返回
3. CDN加速分流,将页面和相关静态资源放在CDN上,用户刷新页面直接返回,不必经过服务器
4.秒杀开始前不让用户进入秒杀页面,在开始后,使用动态URL,例如携带随机数的URL,让用户通过按钮点击进入页面

二、服务器这一块,

1.秒杀系统必须单独部署,不能对其他业务系统有影响

2.秒杀商品相关的数据可以考虑提前放到缓存里面,缓存可以考虑使用多级缓存,尽可能将并发流量挡在缓存这一层

3.我们可以将秒杀商品的库存提前预热,可以提前把商品库存写入Redis,扣减库存可以使用redis的原子操作

4.然后在秒杀接口做限流处理,降级,秒杀并发高到一定程度时可以断开某些接口查询,如推荐商品等和秒杀不相干的接口,减少服务器返回时间,熔断,某些接口大于某个流量活并发峰值直接返回失败,或者返回相应的提示,做到快速响应

5.防刷单处理,过滤出来一部分恶意攻击的流量

6.还可以用消息中间件将下单流程异步化,下单只要保证库存足够,正常下单,然后再异步的推送通知到相关的下游系统,这样大大的硝峰流量

你可能感兴趣的:(电商秒杀系统设计思路)