SRE 核心實務:持續改進循環與可靠性架構

圍繞 SLI/SLO 與錯誤預算的運作循環:用數據在發布速度與系統穩定之間做取捨。
SRE 實務架構圖
「我們的系統能不能做到 100% 永不當機?」每當老闆或客戶丟出這句話,工程師心裡大概都在苦笑。

追求 100% 可用性基本上是不可能的,成本也吃不消。SRE(Site Reliability Engineering)的核心觀念很直接:系統一定會壞,重點不是假裝它不會壞,而是用量化指標把「開發想衝新功能、維運想顧穩定」的矛盾講清楚。

01. SLI、SLO、SLA 到底差在哪

談穩定性不能只憑感覺,需要用數字把標準定下來。SRE 通常分三個層次來定義:

指標 全稱與核心問題 具體範例 主要用途
SLI 服務水準指標
(我們現在跑得如何?)
HTTP 200 成功率(99.85%)、P99 延遲低於 200ms、處理吞吐量 系統即時監控數據的客觀度量數值
SLO 服務水準目標
(我們對內的目標底線?)
過去 30 天內 API 成功率必須 ≥ 99.9% 開發與維運共同認可的健康基準與決策錨點
SLA 服務水準協議
(對外沒達標要賠多少錢?)
單月可用性低於 99.5% 則退還客戶 10% 服務費 法務與商務合約,通常門檻寬鬆於 SLO

實務上 SLI 最常看的幾個維度:

  • 成功率(Availability / Correctness):有效請求與錯誤回應的比例(例如:API HTTP 5xx 佔比)。
  • 回應延遲(Latency):請求耗時的百分位數(建議看 P95、P99,而不是毫無意義的平均值)。
  • 處理容量(Capacity / Throughput):系統在峰值負載下的處理極限與飽和度(CPU、記憶體、I/O 佇列)。

02. 錯誤預算(Error Budget)是怎麼運作的

錯誤預算大概是 SRE 裡面最反直覺、但也是最實用的東西。

假設團隊定義某核心服務的 SLO 為 99.9% 的可用性,這意味著:我們擁有 0.1% 的不可用額度。在一個月(43,200 分鐘)裡,這相當於大約 43.2 分鐘的「容許停機/異常時間」。

💡 錯誤預算的意義:用來承擔合理的風險

如果每個月錯誤預算都剩 100%,代表團隊步調可能太保守了。這筆額度本來就是預留給快速發布新功能、重構舊程式碼或做故障演練的容錯空間。

當錯誤預算被消耗時,團隊的應對規則很明確:

  • 預算充裕時:產品與開發團隊可以放心推新功能,即使偶爾有小波動也在預期內。
  • 預算耗盡時(可用性跌破 SLO):觸發煞車機制。暫停非緊急的新功能上線,優先修復架構漏洞、補測試與調整監控。
  • 預算重置週期:通常以滾動 30 天或季度為單位重置,兼顧開發進度與系統穩定。
⚠️ 實務提醒:錯誤預算需要跨部門共識

推行錯誤預算最怕業務端不認帳:「為什麼超標就要暫停上線?」所以錯誤預算的規則必須事先跟產品負責人達成協議。唯有把「煞車機制」制度化,系統才不會被技術債壓垮。

03. 不究責事後檢討(Blameless Post-mortem)

當事故真的發生了,傳統文化往往忙著找人扛責:「誰寫出這行 Bug 的?誰按錯指令的?」

SRE 的出發點是:人一定會犯錯。如果一個人的單純失誤就能讓整個生產環境停擺,那真正有問題的是「系統防呆與流程設計」,而不是那個人。

不究責檢討會的重點在於防呆機制與流程改進:

  • 還原客觀時序:記錄從告警觸發、排查到恢復的詳細時間點。
  • 追問根本成因(Root Cause):連續問 5 個 Why。不是問「誰做了什麼」,而是問「系統為什麼允許這種危險操作直接在生產環境生效?」
  • 落實改善事項:是否需要加上限流熔斷?CI 流程要補什麼檢查?監控告警有沒有及時通知到負責人?
🛡️ 為什麼堅持不究責?

只有在「誠實坦白不會被秋後算帳」的情況下,工程師才敢把真正踩雷的盲點講出來。把每次事故的教訓變成防呆機制與監控告警,以後遇到類似情況就不會再倒一次。

04. 小結

SLI/SLO 管住數據,不究責檢討管住團隊信任,兩件事缺一不可。

系統不可能永遠不壞,但只要指標明確、遇到故障能坦然檢討並補強防呆,系統就會越來越穩定。這才是 SRE 最實際的價值。

« »