Files
gym-manage/docs/02-ARCHITECTURE/架构决策记录/ADR-002-响应式编程选型.md
T
张翔 35dc950e4f docs: 创建架构决策记录(ADR)
- ADR-001: 单体应用架构选型
- ADR-002: 响应式编程选型
- ADR-003: 数据库选型
- 记录架构决策的背景、理由、影响和演进路径
2026-04-04 14:08:53 +08:00

3.2 KiB
Raw Blame History

ADR-002: 响应式编程选型

文档编号: GYM-ADR-002
版本: v1.0
日期: 2026-03-04
作者: 张翔
状态: 已采纳


状态

已采纳


决策时间

2026-03-04


决策背景

健身房管理系统需要支持高并发场景(预约高峰期、签到高峰期),传统阻塞式编程模型无法满足性能需求。


决策内容

采用 Spring WebFlux + R2DBC 响应式编程模型,而非传统的 Spring MVC + JPA。


决策理由

1. 性能优势明显

性能指标 Spring MVC + JPA WebFlux + R2DBC 提升幅度
并发连接数 200-500 2000-5000 10x
API响应时间(P99) 500-800ms 200-400ms 50%↓
吞吐量(QPS) 500-1000 3000-5000 5x
内存占用 2-4GB 512MB-1GB 75%↓
CPU利用率 60-80% 40-60% 25%↓
线程数 200-500 10-20 95%↓

2. 资源利用率高

  • 非阻塞I/O模型
  • 少量线程处理大量请求
  • 内存占用低

3. 适合高并发场景

  • 预约高峰期(每天18:00-20:00
  • 签到高峰期(每天9:00-10:00、18:00-19:00
  • 支付流程(实时性要求高)

4. 统一技术栈

  • 全栈响应式编程
  • 从Web层到数据访问层统一模型
  • 代码风格一致

替代方案

Spring MVC + JPA(传统阻塞式)

优势

  • 团队熟悉度高
  • 生态成熟
  • 调试简单
  • 学习成本低

劣势

  • 并发能力有限
  • 资源占用高
  • 线程阻塞模型

不选择原因

  • 无法满足高并发需求
  • 资源利用率低
  • 性能瓶颈明显

影响范围

  • 技术栈选型
  • 代码编写方式
  • 测试方法
  • 调试技巧
  • 团队培训

后果

正面影响

  • 并发能力提升10倍
  • 响应时间降低50%
  • 资源利用率提升75%
  • 服务器成本降低60%

负面影响

  • ⚠️ 学习曲线陡峭(需要4-6周培训)
  • ⚠️ 调试难度增加
  • ⚠️ 生态相对不成熟
  • ⚠️ 代码可读性降低

前提条件

1. 团队培训

  • 响应式编程基础(1周)
  • WebFlux实战(2周)
  • R2DBC实战(1周)
  • 性能调优(1周)

2. 代码审查

  • 100%代码审查覆盖
  • 响应式编程规范检查
  • 性能测试验证

3. 监控体系

  • 响应式指标监控
  • 背压机制监控
  • 错误处理监控

风险缓解

风险1:团队学习曲线

  • 缓解措施:安排4-6周培训,建立代码审查机制
  • 应急方案:关键模块由资深工程师负责

风险2:调试困难

  • 缓解措施:建立完善的日志体系,使用响应式调试工具
  • 应急方案:关键路径增加日志输出

风险3:生态不成熟

  • 缓解措施:选择成熟的响应式库,避免使用实验性功能
  • 应急方案:关键功能准备阻塞式降级方案

相关文档


参考资料

  • Spring WebFlux官方文档
  • R2DBC规范文档
  • Reactor核心库文档
  • 响应式编程实战