秒杀系统设计~亿级用户

千里1年前 ⋅ 493 阅读

前端页面,相关按钮点击后置灰,防止重复提交

 

网关(zuul,nginx)层,为了避免前端恶意请求,比如一些攻击脚本,在网关层要对下单等接口按userID限流,几秒钟只能访问一次。考虑到秒杀场景参与人多,秒杀成功的人极少,我们可以把绝大部分抢购下单请求在网关层直接拒掉,按秒杀失败处理。这样就极大减少了后端服务的压力。

 

 

还有哪些细节要考虑:

 

  1. 如何避免超卖?如果在redis中扣减库存,可以利用decr命令扣减库存,decr是原子操作,在分布式环境下也不会有并发问题,decr扣减库存后,判断返回值,如果返回值小于0,扣减库存失败,秒杀也就失败了;如果在数据库中扣减库存可以在where后面加上库存大于0的条件,来避免库存被减成负值。这样就可以避免超卖情况发生了。

  2. 接口防刷,前面已经提到过,在网关层对下单等接口按userID限流。

  3. 网关层除了对userID做限流外,还要做整体限流。在实际访问量超过预估访问量时,整体限流可以起到保护作用,避免系统被压垮。

  4. 防止重复下单,按userID限流已经起到了防止重复下单的作用。假如限制同一个用户10分钟能下一次单,一般情况下10分钟内,商品早已经被抢光了,用户也就没有再次下单的机会了。

  5. 可以结合风控系统,在网关层把羊毛党等有问题的用户请求直接拒掉。

  6. 可以在网关层上面再加一层防火墙或者高防服务,来防御DDos等分布式网络攻击。

 

https://mp.weixin.qq.com/s?__biz=MzIyNTM4ODI0OA==&mid=2247484316&idx=1&sn=aa87d5d7c812ca6fb112b4e925e7ae36&chksm=e801302bdf76b93d431f96d6f71d95b8c02874d2eb7a00728497b5d7c0d7427c0bfdb8b62498&scene=21

全部评论: 0

    

    1. 友善是交流的起点。
    2. 请尽量使用Chrome浏览器(手机端遇到不兼容其他浏览器的情况请使用简单编辑器)。
    3. 同一条评论中多@其他人更容易得到Time。
    4. 支持直接粘贴图片(gif等动图不支持复制粘贴到文本框,需手动保存后上传才可显示)。

    相关推荐