秒杀设计方案

本文探讨了如何设计高并发的秒杀系统,包括使用分布式锁、异步处理、限流策略以及消息队列等技术。通过预生成令牌限制秒杀次数,避免超卖,并利用乐观锁确保数据一致性。在实现方案中,提到了从同步到异步的转变,以及如何通过Redis进行限流和状态管理,以应对从几百到几千的并发量。同时,还提出了将订单生成和扣款操作异步化的建议,以提高系统稳定性。
摘要由CSDN通过智能技术生成

秒杀设计方案

在原有项目上继续加

会导致程序因为并发量崩溃,数据出现问题,都会影响原来的项目

单独写一个服务

重新设计库(几个表)

商品表,订单表

并没有多少人秒杀:

  • 不要秒超了,上锁(悲观锁,乐观锁,mysql)
  • 同步扣款,生成订单

简单地设计方案,数据直接打到数据库上(不推荐)

并发量在几百个

  • 把同步换成异步
  • celery+redis,同步扣款,生成订单

并发量几千

  • 分布式锁(项目部署在多台机器上)

  • 用专业的消息队列(异步)

  • 限流(有令牌才能近来),有资格秒杀的用户,访问秒杀页面,给一个令牌,放到redis一份,也就是用户一份,redis一份

    • 有令牌的,并且在redis中再往后走,只要查过一次就从redis中删除(爬虫不能反复发)
    • 对用户最多生成10个令牌,也就是最多秒杀十次
  • 请求来了之后,有资格的可以参与秒杀的用户id放到消息队列里(消息队列里可以存上千万,上亿个id)

  • 视图直接返回,前端返回一个动图,您正在排队,每隔3s,向后端发送一次请求,查询是否秒杀成功

  • worker一个个的去消费执行,假如1w个都消费完了,

  • 现在redis中预热,设置1w个这个数,每消费一个数字-1,生成订单(redis乐观锁)

  • 生成订单再写成异步

主要点

限流,锁,异步,秒杀

image-20210412230417908

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值