熔断、隔离、限流与降级:故障怎样被限制在局部
熔断判断健康,隔离限制并发,限流约束需求,降级改变服务承诺。
Resilience4j CircuitBreaker 定义失败率/慢调用率、最小样本和 CLOSED/OPEN/HALF_OPEN;Bulkhead 负责并发隔离。
失效现场:局部保护为什么仍会放大故障
依赖变慢却未报错,线程和连接被逐步占满;只配置熔断滑窗并不会限制同时进入的调用,低样本误判又可能在恢复瞬间放入洪峰。 先保存请求时间线、依赖状态、资源水位和权威业务结果,区分产品失败、保护拒绝、基础设施失败和结果未知。
权威语义与量化预算
熔断器依据稳定错误和慢调用分类,Bulkhead 按依赖/租户/优先级隔离并发,限流在昂贵工作前准入,降级返回明确陈旧度和能力缺口。 最小样本、窗口、阈值、OPEN 时长、HALF_OPEN 探针数、并发槽、队列、拒绝和恢复迟滞通过正常/慢/失败/恢复四阶段实验校准。 正向路径证明承诺成立,反向路径注入慢、拒绝、断连、强杀和恢复,禁止用自动重跑覆盖首次现场。
六段可靠性主链
Sliding window
在 Sliding window 阶段声明 owner、输入、状态、截止时间、容量、失败码和下一动作。正向实验产生唯一权威结果,反向实验越过边界并断言拒绝、隔离或恢复可见;任何后台工作都必须在请求结束、超时或停机后拥有明确归宿。
Circuit state
在 Circuit state 阶段声明 owner、输入、状态、截止时间、容量、失败码和下一动作。正向实验产生唯一权威结果,反向实验越过边界并断言拒绝、隔离或恢复可见;任何后台工作都必须在请求结束、超时或停机后拥有明确归宿。
Half-open probe
在 Half-open probe 阶段声明 owner、输入、状态、截止时间、容量、失败码和下一动作。正向实验产生唯一权威结果,反向实验越过边界并断言拒绝、隔离或恢复可见;任何后台工作都必须在请求结束、超时或停机后拥有明确归宿。
Bulkhead
在 Bulkhead 阶段声明 owner、输入、状态、截止时间、容量、失败码和下一动作。正向实验产生唯一权威结果,反向实验越过边界并断言拒绝、隔离或恢复可见;任何后台工作都必须在请求结束、超时或停机后拥有明确归宿。
Rate limit
在 Rate limit 阶段声明 owner、输入、状态、截止时间、容量、失败码和下一动作。正向实验产生唯一权威结果,反向实验越过边界并断言拒绝、隔离或恢复可见;任何后台工作都必须在请求结束、超时或停机后拥有明确归宿。
Degrade contract
在 Degrade contract 阶段声明 owner、输入、状态、截止时间、容量、失败码和下一动作。正向实验产生唯一权威结果,反向实验越过边界并断言拒绝、隔离或恢复可见;任何后台工作都必须在请求结束、超时或停机后拥有明确归宿。
可靠性从失败语义开始,而不是从组件清单开始
deadline 必须穿过线程、连接、网络和重试
重试必须有单一 owner、放大预算和幂等账本
幂等键标识业务动作而不是 HTTP 请求,生命周期覆盖最长重试和消息重放窗口。账本保存请求摘要、处理中/提交/失败终态和原始结果;同键不同载荷必须冲突,同键同载荷返回同一结果。账本与业务写入若不原子,崩溃窗口仍会产生“写成功但无记录”或“有记录但未写”的第二套不确定性。
熔断、隔离、限流和降级解决不同问题
熔断器基于最近失败率或慢调用率推断依赖健康并快速拒绝,但滑窗大小不是并发限制。Bulkhead 用信号量或有界线程池限制同时进入的工作,防止一个依赖占满共享资源。限流约束到达需求,负载削减在资源饱和前丢弃低价值工作,降级则改变响应语义。四者需要共享错误分类和指标,不能互相覆盖。
健康、就绪和停机必须对应平台动作
故障注入用权威状态计算 RTO、RPO 和爆炸半径
可靠性指标必须区分产品失败与保护动作
请求结果至少按成功、业务拒绝、依赖失败、deadline 到期、熔断拒绝、隔离拒绝、限流拒绝、降级成功和结果未知分类。把所有非 2xx 合成错误率会令主动保护看起来像产品退化,也会诱导团队关闭保护换取绿色;只看成功率又会掩盖大量被快速拒绝的用户影响。每类同时记录到达、完成、在途、队列年龄、首次失败与最终结果,并用 operationId 关联权威状态。
故障实验需要证明机制确实接管
依赖治理把事故经验变成门禁
两个 Java 17 模型固定故障见证
离线模型只压缩状态机和量化判据,真实工程再用 Resilience4j、Spring Boot、数据库、消息系统与平台生命周期验证同一不变量。
javac --release 17 -Xlint:all -Werror examples/backend-development/reliability/circuit-isolation-limit-degrade/CircuitStateDemo.java examples/backend-development/reliability/circuit-isolation-limit-degrade/BulkheadIsolationDemo.java
java -cp examples/backend-development/reliability/circuit-isolation-limit-degrade CircuitStateDemo
java -cp examples/backend-development/reliability/circuit-isolation-limit-degrade BulkheadIsolationDemowindow=10 failures=6 slow=2 failureRate=0.60 state=CLOSED->OPEN probes=2 probeSuccess=2 final=CLOSED
paymentSlots=8 reportSlots=4 paymentDemand=8 reportDemand=20 paymentAccepted=8 reportRejected=16 isolated=true发布、回滚与恢复门禁
围绕“失败检测、并发隔离、需求准入和降级语义各自有界并协同恢复,不把一种机制冒充全部保护”保存配置版本、依赖图、基线、故障时间线、权威数据差异、RTO/RPO 和停止条件。发布必须在正常、慢、失败、结果未知和恢复五阶段通过;恢复后还要证明积压归零、重复被吸收、保护状态稳定且没有第二波流量冲击。
