秒杀系统设计

限流

秒杀场景短时间内有很高的并发量,秒杀的难点主要是超卖和限流。业务流程分验库存,较少库存,生成订单三个步骤。十几万的用户同时抢十几件商品,可能会达到几十万的qps,这么大的请求量可能会打垮服务器和数据库。而且99.9%的请求是无效的。

redis限流

做的第一件事是限流,在分布式条件下,一个限流方案是采用redis限流,比如限流到100qps,当前秒作为key。每次key自增,如果大于100之后的超过快速失败。这样能保证每次进入后续请求qps不超过100,但是redis集群的压力会很大。

消息队列削峰

另外一种方案是使用消息队列削峰,请求进入放到消息队列中,同时设定消息队列中消息最大值,如果消息大于这个值,直接抛弃掉,消费端拿到消息后去做处理,这种方案能够保证系统安全。

前端限流

也可以在前端做限流,比如只有偶数秒的请求才能发送出去,方法有多种多样,目的都是减少后段服务器的压力。

乐观锁

前端限流和后端限流在加上消息队列削峰,能够保证服务器不被宕机。但是还会存在并发。采用分布式锁或数据库乐观锁,性能方面考虑采用数据库乐观锁实现。数据库乐观锁是库存表有个版本号,先查询版本号,更新的时候where条件带上版本号。同时版本号自增,只有版本号一致才会更新,表示在这段时间内,数据没有被更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值