1. 课程导入与性能稳定性全景

在 Spring Boot 应用的生命周期里,“功能正确”只是最低门槛。真正决定系统能否长期在线、能否在流量高峰中保持响应、能否在故障发生时快速恢复的,是性能与稳定性工程。它不是某个单点优化技巧,而是一套贯穿设计、开发、测试、部署、运维全过程的工程方法。本课程的目标,是让你从“能跑起来”走向“跑得稳、跑得快、跑得久”。

一、什么是 Spring Boot 性能与稳定性工程

Spring Boot 性能与稳定性工程,是指在 Spring Boot 技术栈下,围绕响应时间、吞吐量、资源利用率、可用性、容错能力等目标,对应用进行可度量、可验证、可治理的系统性建设。它包含三个层次:

  • 性能层:关注单次请求快不快、单位时间能处理多少请求、CPU/内存/IO 是否被高效利用。
  • 稳定性层:关注系统在异常流量、依赖故障、资源耗尽、发布变更等场景下,是否仍能提供可接受的服务。
  • 工程层:关注如何把性能与稳定性要求,转化为可落地的设计规范、测试手段、监控指标和应急流程。

三者不是并列关系,而是层层递进:性能是基础,稳定性是保障,工程化是让前两者可持续、可复制的手段。

二、核心目标与度量维度

没有度量就没有优化。Spring Boot 应用的性能与稳定性,通常从以下维度观察:

维度典型指标观察工具/方式
响应时间P50、P95、P99、最大耗时Micrometer、Prometheus、APM
吞吐量QPS、TPS、并发处理数压测工具、网关统计
资源利用率CPU、堆内存、GC 次数与停顿、线程池队列Actuator、JVM 监控、VisualVM
可用性成功率、错误率、SLA 达成率日志、监控告警、链路追踪
容错能力熔断触发次数、降级成功率、重试恢复时间Resilience4j、Sentinel 指标

需要特别强调的是:平均值会掩盖问题。一个接口平均响应 80ms,但 P99 达到 3s,说明有 1% 的用户体验极差。稳定性工程更关注长尾和极端情况,因此 P95/P99、错误率、超时率往往比平均值更有决策价值。

三、Spring Boot 场景下的核心挑战

Spring Boot 的自动配置和丰富生态极大提升了开发效率,但也带来了一些特有的性能与稳定性挑战:

  • 自动配置的隐性开销:大量 Starter 引入后,Bean 数量膨胀、启动变慢、内存占用上升。
  • 内嵌容器与线程模型:Tomcat/Jetty/Undertow 的线程池、连接数、超时配置不当,容易成为瓶颈。
  • 数据库与连接池:HikariCP 连接数、慢 SQL、事务边界过长,是常见的性能杀手。
  • 远程调用与依赖故障:Feign、RestTemplate、WebClient 调用下游时,超时、重试、熔断策略缺失会导致雪崩。
  • GC 与内存:对象创建过快、缓存无上限、大对象频繁分配,会引发频繁 Full GC。
  • 发布与配置变更:滚动发布、配置热更新、灰度切换过程中,容易出现流量不均或状态不一致。

很多线上故障并非“代码写错”,而是资源边界没有定义、超时没有设置、降级没有预案。性能与稳定性工程的核心,是把这些“默认不安全”的地方显式治理。

四、课程实战路线图

本课程共 30 章,按照“认知—度量—优化—保障—演练”的路径展开。下面这张图展示了从问题发现到稳定运行的整体闭环,也是后续章节将反复使用的分析框架。

Spring Boot 性能与稳定性工程闭环 ① 度量与基线 P95/P99 · QPS · GC 线程池 · 连接池 ② 瓶颈定位 慢 SQL · 锁竞争 远程调用 · 序列化 ③ 优化与调参 JVM · 缓存 · 异步 批量 · 索引 · 池化 ④ 稳定性保障 熔断 · 限流 · 降级 隔离 · 超时 · 重试 ⑤ 压测与故障演练 全链路压测 · 混沌工程 · 容量评估 · 预案验证 持续反馈:指标回归 → 重新度量 → 迭代优化 核心原则:先度量后优化 · 先保命后提速 · 先隔离后共享 · 先预案后变更 对应课程模块:监控与指标 → 性能剖析 → 调优实践 → 稳定性设计 → 演练与复盘

这张图不是简单的流程罗列,而是本课程的分析框架:度量让你知道现状,定位让你找到根因,优化让你提升能力,保障让你守住底线,演练让你验证一切是否真的有效。五个环节形成闭环,任何一次线上问题或性能回归,都可以回到这个框架中重新走一遍。

五、从今天开始建立工程习惯

在后续章节中,你会接触到具体的 Actuator 端点、Micrometer 指标、JVM 参数、HikariCP 配置、Resilience4j 熔断器、压测脚本和混沌实验。但在此之前,请先建立三个基本习惯:

  1. 任何接口都要有超时:无论是数据库、Redis 还是 HTTP 调用,没有超时就没有稳定性边界。
  2. 任何资源都要有上限:线程池、连接池、缓存、队列,无界即危险。
  3. 任何变更都要有观测:发布后看指标、看日志、看链路,而不是“感觉没问题”。

性能与稳定性工程不是一次性的“优化项目”,而是持续运行的工程能力。本课程会带你从单点技巧走向体系化治理,最终让 Spring Boot 应用在真实流量和真实故障面前,依然可控、可恢复、可预期。