跳轉到

Circuit Breaker Outcome Semantics

概念概覽

Tri-State 語義定義

核心知識

Tri-State 語義定義

Circuit Breaker 的結果應為三態而非二態: - Success:呼叫成功,breaker 應記為正面信號 - Failure:呼叫失敗,breaker 應記為負面信號,累積後觸發熔斷 - Ignored:呼叫結果不應影響 breaker 計數

Context 錯誤的語義歸屬

context.Canceled       → Ignored   // 客戶端主動取消,不懲罰下游服務
context.DeadlineExceeded → Failure // 下游服務超時,是真實的可靠性問題

理由context.Canceled 是呼叫方主動中止(例如使用者離開頁面),與下游服務健康度無關;若計入 Failure 會導致 breaker 被客戶端行為誤觸發。context.DeadlineExceeded 則反映下游真實的慢回應問題,應計入。

測試保護

context.Canceled → Ignored 這個決策**必須有明確的測試用例**,防止未來維護者「修正」成 Failure 而不知道這是刻意的業務決策。

經驗教訓

  • context.Canceled 設為 Ignored 是業務語義選擇而非實作細節,必須在測試和 PR 描述中明確說明理由

  • tri-state 比 bool 更能精確表達 circuit breaker 的語義,Ignored 狀態是關鍵設計

常見陷阱

  • 將 context.Canceled 誤計為 Failure 會讓客戶端行為誤觸發 breaker,造成誤熔斷

  • 缺乏測試保護的語義決策容易被後人「修正」成看似合理但錯誤的行為

最佳實踐

  • 為 context.Canceled → Ignored 的語義決策寫明確的測試用例,並在測試名稱或注釋中說明業務理由

  • PR 描述中區分 runtime 語義決策與 API 簽名重構,不要混在同一個 PR

相關概念

來源 Sessions

日期 Session 貢獻摘要

| 2026-03-26 | 59325dc8-0079-4c87-a93e-f2734386d733 | 定義了 Circuit Breaker tri-state(Success/Failure/Ignored)中 context 錯誤的明確語義歸屬,以及這個決策的業務理由 |


本概念頁面由 Semi-Brain Wiki 系統自動維護

最後更新: 2026-03-26