天天神券面向多商家的优惠券营销场景,覆盖优惠券模板管理、批量分发、高并发领取、结算、核销、退款及检索,旨在帮助商家开展拉新促活与优惠营销活动。
商家创建优惠券模板并配置库存、领取规则及使用条件后,可以开展批量发券或用户主动领券活动;用户领取优惠券后,在交易环节完成锁定和核销,退款时按业务规则处理优惠券状态。
平台围绕优惠券全生命周期构建业务链路,重点解决集中领券时的库存竞争、异步分发中的重复消费,以及消息发送失败后的库存补偿问题,提升营销活动高峰期的处理能力与可靠性。
我主要负责高并发领券、消息消费、数据同步及异常补偿链路,使用 Spring Boot 3、Spring Cloud Alibaba、MySQL、Redis、RocketMQ、Canal 和 Elasticsearch 构建分布式后端。
将库存校验、用户限领、额度占用和库存预扣收敛到 Redis Lua 脚本中原子执行,通过 RocketMQ 异步落库,降低同步链路中的数据库压力。
针对消息积压和数据库库存竞争,采用 MySQL 库存分桶策略,并增加消费队列提高处理并发度,项目测试中 MySQL TPS 由 8 提升至 27。
使用 Redis 消费状态机、数据库联合唯一索引和本地事务处理重复消费;通过 Canal 订阅 MySQL Binlog,驱动用户券缓存更新及到期消息处理。
针对 MQ 发送失败后的 Redis 库存空扣,设计独立 Lua 补偿脚本,原子恢复库存与领取额度;通过带 TTL 的 SET NX 标记抑制有效期内重复补偿,并以单调不回退的领取序号降低标识复用风险。
在同机 Docker、关闭入口限流的 100 并发快速基准中,异步接入链路完成 20,000 次请求,吞吐达到 5,001 QPS,P99 为 50 毫秒,请求零错误。