开发计划
2025/9/17...大约 6 分钟
开发计划总览
- 周期: 3–4 周(每天 1–2 小时,或以人天计 12–16 人天)
- 交付物: 可运行的后端 API(用户/商品/订单/秒杀)、可观测性、压测报告、容器化与一键环境
- 成功标准(DoD):
- 主链路端到端打通,E2E 测试通过
- 核心接口 P95 小于 200ms(本地/单机)、错误率小于 1%
- 秒杀压测 10k 请求内无超卖/重复下单,消费无明显积压
- 代码质量:lint 通过、关键路径具备单元与集成测试覆盖
里程碑与日程(建议)
- 里程碑 0(0.5 天):工程初始化、环境一键化
- 里程碑 1(1 天):骨架与基础设施(配置/日志/错误处理/健康检查)
- 里程碑 2(2 天):用户与认证(JWT、Refresh、RBAC)
- 里程碑 3(2 天):商品与库存(迁移、CRUD、缓存)
- 里程碑 4(3 天):秒杀活动(预减、限流、幂等)与消息队列(生产/消费)
- 里程碑 5(2 天):订单事务与支付模拟、延时取消
- 里程碑 6(1 天):可观测性(指标、追踪、pprof)
- 里程碑 7(1 天):压测与优化
- 里程碑 8(1 天):容器化与交付(Compose/K8s 可选)
里程碑 0:工程初始化(0.5 天)
- 任务
- 初始化 go mod、目录骨架
cmd/、internal/、configs/、migrations/、deploy/ - 编写
docker-compose.yml(PostgreSQL/Redis/RabbitMQ)与.env.example - 预置
golangci-lint与基本 CI(lint/test/build)
- 初始化 go mod、目录骨架
- 验收
docker compose up -d成功;go build成功- CI 能跑通 lint 与测试空壳
- 风险
- Windows/WSL 环境差异,使用 Compose 避免本地安装复杂度
里程碑 1:基础骨架(1 天)
- 任务
- 配置加载与校验(环境变量优先)
- 结构化日志(zap/zerolog)、全局错误恢复、统一响应格式
- 路由与
GET /healthz,请求 ID/Trace ID、CORS、超时中间件
- 验收
- 非法配置启动失败并给出清晰报错
- 健康检查返回依赖基本探活信息
- 风险
- 统一错误码与响应体尽早定稿,避免后期大改
里程碑 2:用户与认证(2 天)
- 任务
- 迁移:
users表;注册/登录;密码哈希(bcrypt/argon2) - JWT Access/Refresh 策略、Refresh 流程、简单 RBAC(admin/user)
- 单元测试:鉴权、过期、刷新、非法 token
- 迁移:
- 验收
- 非法凭证拒绝访问受限资源;刷新后旧 Access 失效
- 覆盖成功/失败/过期/回放攻击等场景
- 风险
- 时钟偏差导致 token 判定错误,配置容忍窗口 30–60 秒
里程碑 3:商品与库存(2 天)
- 任务
- 迁移:
products、inventory;仓储层与服务层 - 商品 CRUD、库存查询;必要索引与约束
- 读优化:可选缓存读;缓存失效策略(更新或删除)
- 迁移:
- 验收
- CRUD 与库存读写正常,事务边界正确
- 基础单元与集成测试通过
- 风险
- 避免 N+1;分页与排序约定尽早落地
里程碑 4:秒杀与消息队列(3 天)
- 任务
- 迁移:
spike_events、spike_orders模型 - Redis Lua 预减库存与售罄标记;用户-活动去重标记
- 限流(令牌桶/滑动窗口)、接口防抖、幂等键
- MQ Producer 推单消息;Consumer 幂等消费、DB 事务落库
- 可选 Outbox(提升最终一致)
- 迁移:
- 验收
- 压测 10k 请求:无超卖与重复下单;消费及时(积压可控)
- 异常路径:消费失败重试/退避、死信记录
- 风险
- 热点 Key TTL/预热策略;Lua 回退;队列临时积压报警
里程碑 5:订单与支付模拟(2 天)
- 任务
- 订单创建与查询;订单项与金额校验
- 延时取消(死信队列或延迟插件),库存回补
- 事务保证:订单与库存一致性
- 验收
- 未支付订单在超时 T+X 自动关闭并回补库存
- 并发下单/取消无脏数据、无库存负数
- 风险
- 延时队列实现差异,优先选 RabbitMQ 或以定时扫描兜底
里程碑 6:可观测性(1 天)
- 任务
- 指标:QPS、延迟、错误率、缓存命中、队列积压、消费者重试
- 追踪:OpenTelemetry(HTTP/MQ/DB 跨组件)与采样策略
- pprof 与基础性能探查
- 验收
- 指标在
/metrics可采集,trace 可跨链路关联
- 指标在
- 风险
- 采样率过高导致开销;按环境区分
里程碑 7:压测与优化(1 天)
- 任务
- 编写压测脚本(k6/hey),覆盖登录、商品列表、下单、秒杀
- 性能瓶颈分析与优化(连接池、索引、缓存命中、锁粒度)
- 降级与限流参数调优
- 验收
- 产出压测报告(吞吐、P95/99、错误率)与优化记录
- 风险
- 本地与线上差异大;数据规模与参数需可调
里程碑 8:交付与部署(1 天)
- 任务
- 多阶段 Dockerfile、Compose 一键启动
- 产出部署说明与环境变量清单
- 可选:K8s 清单与 HPA 设计建议
- 验收
- 通过容器方式一键起服务并跑过 E2E 脚本
- 风险
- 镜像体积、镜像缓存策略与构建时间
工作分解(WBS)
- 工程与基础:配置、日志、错误处理、健康检查、路由、中间件
- 用户域:模型/迁移、注册/登录、JWT、Refresh、RBAC、测试
- 商品域:模型/迁移、CRUD、库存、缓存、测试
- 秒杀域:活动、预减/Lua、限流/幂等、MQ 生产/消费、Outbox(选做)、测试与压测
- 订单域:创建/查询、事务、延时取消、库存回补、测试
- 可观测:metrics、tracing、pprof、报警指标建议
- 交付:容器化、Compose、(可选 K8s)、文档与运行手册
每日节奏与质量保障
- 每日小目标与自测清单:接口联通、错误处理、日志、边界条件
- Code Review:接口与错误码一致性、事务与并发安全、单测覆盖关键路径
- 测试金三角:单元(快速)、集成(链路)、E2E(回归)
- 质量门禁:lint 必过,主干分支需测试通过
风险与应对
- 热点与超卖:Lua 原子扣减、售罄标记、幂等键与 DB 唯一约束
- MQ 堆积:重试与退避、死信队列、消费者水平扩展
- 一致性:Outbox 或补偿回滚;失败报警与人工干预指引
- 资源耗尽:连接池上限、超时与熔断、降级兜底
- 配置与密钥管理:多环境隔离、必填项校验、最小权限原则
交付清单(最终)
- 代码与目录结构(
cmd/、internal/、configs/、migrations/、deploy/) docker-compose.yml、.env.example、多阶段Dockerfile- 文档:运行手册、API 规范、错误码字典、运维手册
- 测试:单元与集成测试、压测脚本与报告
- 观测:Prometheus 指标、OTel 追踪、pprof 指南
可选生成物(如需我继续)
- 任务看板模板(按上述里程碑拆分 issue 标题与验收标准)
- k6/hey 基础压测脚本与运行命令
docker-compose.yml与多阶段Dockerfile雏形Taskfile.yml开发命令集(build/test/lint/run/migrate)