秒杀

场景

  • 商品库存
  • 兑换码

操作

  • 查库存
  • 秒杀入队

中间件

  • Zookeeper
    Leader选举(单任务队列),节点命名(多任务队列)
  • Redis
    单任务队列,资源池,库存计数,已秒杀用户Mapping

实现方法

  • 单任务队列
    Zk Leader选举,Redis实现任务队列,Redis维护单个码池与库存计数
  • 多任务队列
    Zk节点命名,Redis维护各节点码池与库存计数,JVM本地SingleThreadExecutor任务队列

秒杀

通过Redis判断用户是否已秒杀
判断并加载库存
入队列(bounded,discard policy)

查库存

判断并加载库存

  • 单队列
    直接返回Redis库存计数
    -多队列
    Redis中各计算节点库存计数之和

任务执行

判断并加载库存
库存不足或码池为空,尝试加载库存或码池(多节点或redis宕机场景)

码池peek兑换码
begin db transaction
读节点库存或读兑换码
库存不够或兑换码已使用或用户已秒杀,更新redis(库存=0,删码,更新mapping)(乐观回滚或悲观锁),重新入任务队列或discard,直接return
更新DB
end db transaction

db事务成功,Redis更新:

  • 用户秒杀mapping
  • 库存 - 1 or 删码

判断并加载库存

初始状态(Redis宕机或应用首次启动),中间状态(节点池归零),终结状态(总池归零)

初始状态和中间状态需加载库存,如加载发现总池归零,进入终结状态

终结状态秒杀任务不再入队列,秒杀结束
已入队列任务直接return

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定...
    zwb_jianshu阅读 678评论 0 1
  • 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定...
    zwb_jianshu阅读 575评论 0 0
  • 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定...
    码道功臣阅读 6,054评论 2 79
  • #0 系列目录# 秒杀系统架构 秒杀系统架构分析与实战 #1 秒杀业务分析# 正常电子商务流程 (1)查询商品;(...
    Java架构师Carl阅读 1,607评论 0 8
  • 来源:陶邦仁 链接:http://my.oschina.net/xianggao/blog/524943 0 系列...
    meng_philip123阅读 3,561评论 0 65