美文网首页
秒杀系统设计思路

秒杀系统设计思路

作者: 先生zeng | 来源:发表于2019-12-20 15:21 被阅读0次

昨天遇到这个问题,发现自己临时总结的不是很好,所以现在想重新整理一下思路。

分析一下问题:

类似淘宝那种做秒杀系统活动,你是如何设计的?

场景分析: 1. 需到达某个时刻才可以开始秒杀(某个时刻之前需要控制拒绝请求)。
2. 一瞬间大量的请求到后台,服务器,数据库,缓存都会扛不住。(前端拦截、削峰,限流)
3. 满足条件才可以进行秒杀(最先过滤这些不满足条件的)
4. 防止恶意刷单请求,网站攻击(SQL注入,CSRF)
5. 库存情况,会有大量读写(缓存)

整体流程按照如下所示:


前端设计:

  1. 提前把静态化页面,html,css,js等缓存在用户浏览器或app端
  2. 秒杀的点击按钮可以开始时间之前置灰,在开始秒杀活动之前,避免内部人员或外面的人提前刷物品。
  3. 避免链接暴露,在浏览器模式下,F12模式会看到请求的地址。
  4. 多次点击,设置按钮点击后就置灰,只能退出再重新点击。

nginx

网关层,可以做负载均衡算法,过滤一些恶意的ip地址。

api层

可以做验证用户是否登录,是否具备秒杀资格。

库存的数量我想存放在redis缓存中,使用String的方式。使用redis自带的string自减方式去减库存,用户请求进入先验证库存是否还有,如果还有库存,就继续往下走。这里也可以说是库存预热。

这个使用lua脚本的方式,写一个脚本把判断库存扣减库存的操作都写在一个脚本丢给Redis去做,那到0了后面的都Return False了是吧,一个失败了你修改一个开关,直接挡住所有的请求,然后再做后面的事情嘛。

业务相关层

刚开始进来肯定是订单,订单需要去验证缓存中是否还有库存,如果还有,才可以继续往下走
这里一般是订单层,可以存放在mq中,去解耦和削峰。一点一点的去实现减库存。
同时,多余的请求进来的时候,这时候有的前端可能有实现控制了1秒内没返回,前端就返回响应错误,可以把队列中的减库存操作,类似线程池中拒绝策略那样,把等待队列中超过一秒的直接丢弃回给前端,返回失败。

最后经过上面的层层调控,进入到减库存操作的已经剩下很少的流量的,如果是秒杀超过10000件物品的,就需要mq去慢慢减库存,实现解耦。

关于缓存层,并发量还是很大,redis可以做读写分离,主从复制,做集群。redis并发竞争减库存,可以去使用lua脚本,去读取和减库存这一系列操作,库存数为0,就返回。

最后还有一个主要的因素,就是解决超卖的现象产生,你只有10000件物品的话,多出了好几十件,这部分的损失不可能让卖家背锅啊,只能秒杀程序员了。这里去减库存判断是否还有库存时,需要使用大于等于0判断,而不是等值判断。

还有各个业务层,nginx,数据库都做集群处理,多部署几太服务器,才能抗住大流量。

相关文章

  • 秒杀系统设计思路

    昨天遇到这个问题,发现自己临时总结的不是很好,所以现在想重新整理一下思路。 分析一下问题: 类似淘宝那种做秒杀系统...

  • 秒杀系统设计思路

    秒杀场景:比如选课系统。当然并发不多,只是举个例子。1、每个老师只有40个名额,但是有4000个学生并发来选某一个...

  • 秒杀系统设计思路

    一、限流与降级 客户端限流 按钮置灰 js控制每秒只能发送一个请求 站点层限流 1. Nginx限流 Nginx官...

  • 秒杀系统设计总结(持续更新中。。)

    一、前言 秒杀系统其实是一个比较复杂的设计,文章先介绍设计秒杀系统的思路脉络和设计系统的原则。后面章节再详细介绍使...

  • 彻底弄懂 “秒杀系统”

    今天我们一起来看看,一套秒杀系统在架构设计上需要有哪些考量: 秒杀场景的特点 系统隔离的设计思路 客户端设计 代理...

  • 浅谈秒杀系统设计思路

    秒杀场景 例如双11、618 涉及问题 高并发:时间短,瞬间用户量 超卖:卖出量多于库存 数据库超负荷:数据库甚至...

  • 秒杀(二)

    背景:最近看自己以前写的博客。有一个有关秒杀的博客:秒杀系统设计思路[https://www.jianshu.co...

  • 用Redis轻松实现秒杀系统

    秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路: 写入内存而不是写...

  • 用Redis轻松实现秒杀系统

    秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路: 写入内存而不是写...

  • 用Redis轻松实现秒杀系统

    秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路: 1:写入内存而不...

网友评论

      本文标题:秒杀系统设计思路

      本文链接:https://www.haomeiwen.com/subject/nvbbnctx.html