后端 示例内容 · 待替换

校园活动报名 API

为社团活动提供高并发报名、候补队列和可追踪的通知服务。

角色
后端负责人
时间
2025.04 - 2025.06
校园活动报名 API封面
01 / PROBLEM

一句话

热门活动开放报名时瞬时请求集中,容易出现重复报名、超卖和状态不一致。

02 / CONTEXT

背景与目标

原有表单工具无法处理名额竞争,也无法向候补用户可靠地发送递补通知。项目目标是构建一个可审计、可重试的报名服务。

  • 保证名额扣减的原子性,禁止重复报名和超卖。
  • 在 1,000 并发请求下保持接口成功率高于 99%。
  • 让运营人员可以追踪报名、候补、取消和通知状态。
03 / ROLE

我的角色

后端负责人

  1. 设计数据库模型、接口契约和状态机。
  2. 实现 Redis 原子扣减、幂等键和异步通知。
  3. 编写集成测试、容器化本地环境与基础监控。
04 / STACK

技术栈

JavaSpring BootPostgreSQLRedisDocker
05 / SYSTEM

架构图 / 数据流

API 网关完成鉴权和限流,报名服务通过 Redis Lua 脚本原子扣减名额,并将可靠事件交给通知消费者。

报名请求与异步通知链路
报名请求与异步通知链路
06 / FEATURES

核心功能

原子名额管理

通过 Lua 脚本一次性完成余量检查、扣减与报名记录创建。

幂等提交

客户端请求键与服务端记录共同避免重复提交。

候补递补

取消报名后自动选择队首用户并发送带重试的通知。

07 / TRADE-OFFS

难点与解决方案

数据库与缓存状态可能短暂不一致

将 Redis 作为实时准入层、数据库作为事实来源,通过事件日志对账并支持自动修复。

通知失败会阻塞主链路

使用 Outbox 模式持久化事件,消费者异步发送并对失败任务指数退避。

08 / OUTCOME

结果

压测环境中实现 1,000 并发下无超卖、成功率 99.4%,并将报名状态查询接口的 P95 控制在 210ms。

1,000压测并发
99.4%接口成功率
210msP95 响应时间在本机 Docker 压测环境
11 / RETROSPECTIVE

复盘

如果重做,我会在设计阶段补齐容量模型和故障演练,提前明确 Redis 不可用时的降级路径,而不是只在开发末期进行压测。