限流、降级与容量保护:过载时怎样守住关键路径
保护目标是有界失败和快速恢复,不是让所有请求慢慢超时。
Micrometer 的 Meter 概念 可用于记录准入、拒绝、队列与完成率,但保护决策仍需权威资源水位。
故障现场:局部数字为什么会给出错误结论
系统饱和后继续接受全部请求,入口、线程池和连接池多层排队;超时触发重试,关键支付与可选推荐共享容量,最终全部慢且恢复时再次洪峰。 第一条规则是同时保存负载输入、业务输出和资源水位;只有结果数字而没有发生条件,无法区分代码变化、环境噪声、缓存热度和依赖波动。
先固定权威测量对象
准入基于经过验证的并发/速率容量、队列年龄和下游健康;拒绝早于昂贵工作,携带可行动错误和 Retry-After,不能靠 CPU 单指标盲判。 正向实验达到预期吞吐和延迟,反向实验制造饱和、队列、暂停或依赖退化,并证明指标能揭示而非掩盖差异。
六段性能主链
Demand
在 Demand 阶段记录时间戳、计数、资源 owner、上限和失败原因。测量探针的开销单独评估;并行阶段按关键路径组合,串行阶段才允许求和。改变参数后重新验证上下游水位,避免把等待从一个队列搬到另一个队列。
Admission control
在 Admission control 阶段记录时间戳、计数、资源 owner、上限和失败原因。测量探针的开销单独评估;并行阶段按关键路径组合,串行阶段才允许求和。改变参数后重新验证上下游水位,避免把等待从一个队列搬到另一个队列。
Priority queue
在 Priority queue 阶段记录时间戳、计数、资源 owner、上限和失败原因。测量探针的开销单独评估;并行阶段按关键路径组合,串行阶段才允许求和。改变参数后重新验证上下游水位,避免把等待从一个队列搬到另一个队列。
Deadline
在 Deadline 阶段记录时间戳、计数、资源 owner、上限和失败原因。测量探针的开销单独评估;并行阶段按关键路径组合,串行阶段才允许求和。改变参数后重新验证上下游水位,避免把等待从一个队列搬到另一个队列。
Degrade
在 Degrade 阶段记录时间戳、计数、资源 owner、上限和失败原因。测量探针的开销单独评估;并行阶段按关键路径组合,串行阶段才允许求和。改变参数后重新验证上下游水位,避免把等待从一个队列搬到另一个队列。
Recovery hysteresis
在 Recovery hysteresis 阶段记录时间戳、计数、资源 owner、上限和失败原因。测量探针的开销单独评估;并行阶段按关键路径组合,串行阶段才允许求和。改变参数后重新验证上下游水位,避免把等待从一个队列搬到另一个队列。
性能结论先声明系统边界与负载模型
分布、排队和守恒关系必须同时成立
负载发生器也会制造测量错误
资源池必须沿同一截止时间协作
虚拟线程降低线程持有成本,不增加数据库连接、CPU 或远端 QPS;连接池扩大会增加数据库活跃会话和锁竞争;批量与压缩减少网络调用却增加内存、延迟和 codec CPU。任何参数变化都观察瓶颈是否迁移,不能只看被优化局部的耗时。
JVM、GC 与操作系统证据不能脱离业务负载
CPU 利用率低不代表有余量,线程可能等锁、连接、磁盘或网络;CPU 高也可能是序列化、压缩、GC、TLS 或自旋而非业务计算。结合运行队列、上下文切换、缺页、磁盘时延、网络重传和容器 throttling,先定位资源需求再调整参数。
性能数据同样需要安全与治理
用阶梯负载画出拐点而不是只压一个峰值
分层剖析必须回答时间和资源去了哪里
基准结果需要反事实与可回滚证据
两个 Java 17 模型固定量化见证
离线模型不冒充真实压测,只固定公式、边界和判定输出;真实环境再用直方图、JFR/GC 日志、数据库与消息指标证明同一不变量。
javac --release 17 -Xlint:all -Werror examples/backend-development/performance/performance-protection/TokenBucketDemo.java examples/backend-development/performance/performance-protection/LoadSheddingDemo.java
java -cp examples/backend-development/performance/performance-protection TokenBucketDemo
java -cp examples/backend-development/performance/performance-protection LoadSheddingDemocapacity=5 refill=2 requests=9 admitted=7 rejected=2 tokensLeft=0 bounded=true
critical=80 optional=40 capacity=100 optionalDropped=20 criticalAccepted=80 utilization=1.00 priorityProtected=true容量、回归与恢复门禁
关键与可选流量分别分配预算和保底份额;队列上限、截止时间、令牌补充、降级条件、恢复迟滞和探测流量通过故障注入验收。 围绕“过载时入口准入、优先级、截止时间和降级协同,使关键流量有界完成且恢复不发生二次冲击”保存基线、候选、差值、原始分布和权威结果。过载实验还要证明拒绝有界、关键流量受保护、积压排空且恢复迟滞不会制造二次冲击;不满足任一项即阻止发布或自动回滚。
