限量一百张而同一秒来了两单:先拦单还是先扣数,靠票务系统把闸放在哪一层
发布时间 2026-10-16 18:01:43 易买票

八月二号那场限量 100 张的票,放票后第 11 秒,同一毫秒落进两笔下单请求,抢的是仅剩的 1 张。日志里两条都写着校验通过,出票记录留下 2 条,可售数扣成负 1。超卖这张不是限量配少了,是并发下单时把闸放错了位置,先扣了数才想起拦单。

一秒拆成四步,闸只放第二步

把那一秒摊开看:请求进来、锁数、出单、回写。第一步只做参数校验和限购校验,不碰库存;第二步锁数,票务系统把可售数占住;第三步出单,写订单和凭证;第四步回写,把核销、渠道账和售票系统的日终数补齐。闸必须放在第二步。放在第一步,拦不住同一秒的第二笔;放在第三步,单已经出来再拦,等于把超卖坐实。

两人同时抢那一张,谁成功,答案是谁先拿到锁。锁一次只发给一单,第二笔在同一档里拿不到锁,当场返回无票,根本不进第三步。判断动作很硬:拿两笔请求的接收时刻去锁表里查,同一张票在有效期内只应该有一条有效锁记录;查出两条,说明锁是按请求发的而不是按票发的,限量就成了摆设。

一秒内四步流程与闸位所在

先扣数后拦单,脏数据落在哪

数扣了、单没成,可售数少一格而票务系统里找不到对应订单,前台显示无票、后台还留着可售,两处谁都不敢动。回滚要是没跑,渠道账和系统账分家,到日终盘点才显形。锁的有效期 20 秒,20 秒内不出单自动回滚,占着的数原路退回。这个数不能图省事往大设,设长了客人真支付不上、票也一直被空占,限量 100 张能有一大半挂在空锁上。

接口重试时锁不续期。同一账号 60 秒内的重复请求只认第一次,后面几笔都返回第一次的结果,锁跟着第一单走,到点该回滚就回滚。给重试续锁,等于让一个客人拿一个按钮反复占位,并发下单时别的账号全被挡在门外。核对办法也简单:拿重复请求的报文比对账号和时间窗,命中的那一笔不该留下新锁记录。

闸位要写进接口文档,不能只靠口头约定。票务系统里四步各有一条日志编号,出问题时按编号串起来看,一眼能看出第二笔请求在哪一步被挡下:挡在锁那一步属正常,挡在出单之后就是顺序放错,得回头改代码。售票系统那头的渠道接口按同一套编号说话,谁重试、谁排队、谁被拒,记录都落在同一张表里,渠道来吵也拿得出时刻。

锁有效期与重复请求只认第一次

限量这件事靠的是顺序不是速度。四步走顺,票务系统里并发下单最多让第二笔早一点拿到无票回执,不会让超卖混进核销,也不会让客人以为票被人抢了。查问题也照这四步倒着走,一步看一眼,跳步的排查只会把闸位越改越歪。

例外只有一类:窗口现场出票走人工优先,直接扣可售数,不排队。这一条走的是窗口售票系统那一行,扣完单独记一笔,日终对账时和线上那批并发单分开看。

立即咨询领取智慧景区建设解决方案

点击下方文字 自动复制微信号
15629900190(点击复制)