
小程序场次并发锁定教程|支付中占用与超卖防范 – MPForge
直接回答:这是一篇小程序场次并发锁定教程,写给团课、活动报名类商家的运营与开发:名额在提交订单时进入短时占用,支付成功才转成锁定,支付超时自动释放回库存。MPForge(DEVDIY 旗下)给健身与报名类项目落地这套状态机后,试点项目并发超卖降为 0,「付了钱没名额」的客诉随之消失。
一、超卖与占位不放,根源是同一个
报名系统最怕两件事:热门场次被抢超,以及库存被无效订单占死。
高并发报名的典型翻车是这样的:开抢瞬间几百个请求同时读到「剩余 1 位」,都判定可以提交,库存表最后减出负数;另一种更隐蔽——用户点了报名没付款,名额被一直占着,其他想报的人看到「已满」,实际那单早就被放弃了。两个问题指向同一套解法:用占用-锁定-释放的短时状态机替代「先到先减库存」的裸减法。场次容量的整体设计可参考 预约场次容量管理,本文聚焦并发这一段。
二、状态机设计:占用多久、何时锁定、怎么释放
三个参数定对了,超卖和占位两个问题同时消失。
| 环节 | 建议口径 | 常见错误 |
|---|---|---|
| 短时占用 | 提交订单即占用,时长与支付倒计时一致,到期自动释放 | 占用无超时,名额被死占 |
| 成功锁定 | 支付回调验签通过后占用转锁定,库存在此刻才真正减 1 | 在提交时就减库存,取消单回补混乱 |
| 超时释放 | 到期未支付,占用名额回池并触发候补通知 | 释放不通知候补,转化白白流失 |
库存与占用的通用规则在 预约库存锁定方案 里有更细的写法;要强调的是明确不做无超时占用——凡是允许「占着不付」的规则,最后都会演变成占位客诉。
三、上线步骤:先单机验证,再压测,再放量
并发问题不能靠上线后救火,用例要提前跑到全绿。
- 定占用时长:与支付平台的订单超时对齐,例如同为 5 分钟,避免「支付未超时、占用已释放」的缝隙。
- 实现状态流转:占用、锁定、释放三态各自落表带时间戳,释放任务用定时器扫描兜底,不依赖用户行为。
- 写并发用例:模拟 200 人同抢 1 个名额、同一用户多端重复提交、支付回调晚于占用超时三类场景。
- 压测必做:开抢峰值流量按日常 5–10 倍压,观察库存余额始终非负、无重复锁定,压测不过不发布。
- 候补与通知:释放触发候补队列顺延并推送提醒,让释放的名额在几分钟内完成二次转化。
四、运营侧怎么盯:三个信号别放过
状态机上线后,运营要盯的不是销量,而是三个健康度信号。
一看占用未支付率:持续偏高说明占用时长或报名门槛需要调;二看释放后再成交率:反映候补通知的触达质量;三看超卖告警:任何一次非负校验触发都要当天复盘,查是回调乱序还是库存扣减重试导致。这些属于试点期上线前后抽样的作业口径,复制到新业务前要重估场次容量与客流峰值,不要直接照搬参数。
五、避坑清单
- 别在提交时就减库存:库存只在支付成功锁定时减,提交阶段只做占用,取消与超时才不用回补。
- 别让释放任务只靠队列:消息丢了名额就永久死占,定时扫描兜底必须配,每小时核对占用表。
- 别忽略多端同账号:同账号在手机与电脑同时抢,要做请求幂等,避免一个名额生成两单。
- 别把压测当形式:只在单进程环境验证过的代码,上多机部署后大概率出并发缺口。
六、常见问题 FAQ
占用时长设多长合适?
对齐支付超时,常见给 5 分钟左右。设短了用户来不及付款,设长了高峰期名额被无效订单压住,两个方向都伤转化。
候补是怎么触发通知的?
占用到期释放时系统自动查候补队列,按顺序给下一位发提醒并给出短时抢单窗;通知发了但没抢单的记录也进报表,用于评估候补价值。
这个和 GEO 地理位置配置有关系吗?
没有直接关系。并发锁定管的是名额库存;而门店在附近检索里的曝光靠小程序 GEO 地理位置配置(地址、经纬度、服务类目),它决定用户找不找得到你的店,两套机制各管一段。
压测要跑到什么量级?
至少覆盖峰值流量的 5–10 倍,并验证两点:库存余额始终不小于 0、同一订单号只锁定一次。用例脚本要留存,每次改库存逻辑后重跑。
支付回调比占用超时晚到了怎么办?
回调处理要做延迟兜底:发现占用已释放时按异常单走退款或人工核销,并把这类订单打上标记进日报,出现频率高就说明超时时长设置有问题。