SRE 並非追求最大化 uptime,而是主動管理風險。可靠性愈高,邊際成本愈陡(每多一個 9 可能貴 100 倍),而使用者通常根本感受不到差異——他們手裡的手機、家裡的 WiFi、上游的 ISP 才是體驗的真正瓶頸。
本章透過「風險」的視角審視 SRE:如何量化、如何取捨、如何用**錯誤預算(error budget)**作為中性而實用的決策機制。
為什麼要管理風險而非最大化可靠性#
把可靠性推到極致會帶來兩類成本:
- 冗餘資源成本:為了能下線維護、容忍硬體故障、做災難復原所需的冗餘運算、儲存與網路
- 機會成本:把工程師投入「降風險」工作就無法投入「使用者直接感受到的功能」
SRE 把可靠性目標視為「下限」與「上限」的雙重指標:超過目標太多代表我們過度投資了,這些資源原本可拿去做新功能、清技術債、降低營運成本。
量化服務風險#
為什麼用「請求成功率」而非 uptime#
傳統做法以「時間可用度」表示:
$$\text{availability} = \frac{\text{uptime}}{\text{uptime} + \text{downtime}}$$
例如 99.99% 全年可宕機 52.56 分鐘(見附錄 A)。但 Google 服務是全球分散式的,幾乎永遠有一部分在運作,時間制不合用。改採以請求為單位的整體成功率:
$$\text{availability} = \frac{\text{successful requests}}{\text{total requests}}$$
例:日請求 2.5M、SLO 99.99% 的服務,每天可容忍 250 次失敗。
此度量同樣適用於非服務型系統——批次、管線、儲存、交易系統都有「成功 / 失敗工作單位」的概念,可套用同一框架。
通常以「季度」設定目標,並以週或日的頻率追蹤偏差。
服務的風險容忍度#
消費者服務#
識別風險容忍度的工作,需要 SRE 與產品負責人一起把業務目標翻譯成可量化的工程目標。
評估時的主要面向:
- 目標可用度:使用者期待、是否直接連動營收、付費或免費、競爭對手水準、面向 to-C 還是 to-B
- 例:Google Apps for Work(企業導向)對外承諾 99.9%,內部訂得更嚴並有合約罰則
- 例:2006 年 YouTube(消費者導向、快速迭代)可用度目標較低,把成本騰給功能開發
- 故障型態:低頻率但全站斷線 vs. 持續低比例失敗,總錯誤數可能相同但商業影響迥異
- 隱私洩漏型故障 → 寧可整站下線止血
- 後台型管理介面 → 可接受規律的維護窗口(屬計畫性停機)
- 成本:用「多 1 個 9 增加多少營收 / 成本」量化
- 例:年營收 $1M、99.9% → 99.99%(+0.09%)→ 額外營收 ≈ $900;若改善成本低於 $900 才划算
- 沒有清楚轉換函數時,可參考 ISP 背景錯誤率(約 0.01%–1%),低於此水準的錯誤對使用者「埋在雜訊裡」
- 其他指標:例如 AdWords 必須不拖慢搜尋;AdSense 因為跑在第三方頁面,延遲門檻寬鬆很多,可在配置上做大量取捨
基礎建設服務#
基礎建設天生有多種 client,需求往往互斥:
- 低延遲使用者希望 Bigtable 的請求佇列「幾乎永遠空著」
- 吞吐量使用者希望佇列「永遠不空著」(不要 idle)
解法是分層服務——同樣的硬體與軟體,用配置(冗餘度、地理分佈、配額)切出多個服務等級,讓 client 自行依需求選擇與付費。
例:Bigtable 的 low-latency cluster 與 throughput cluster;後者成本可能僅前者的 10–50%。
前端基礎建設(反向代理、邊緣負載平衡)因處於請求必經之路,無法「優雅降級」隱藏問題,所以一律以極高可靠性設計。
錯誤預算(Error Budget)#
為什麼需要它#
開發與 SRE 的衝突來自評估指標不同(速度 vs. 穩定)與資訊不對稱。常見的爭執點:
- 軟體容錯做到多硬?
- 測試做到多嚴?
- 發佈頻率多高?
- 金絲雀(canary)放多大、跑多久?
沒有客觀指標時,這些決策容易變成「誰嗓門大」「誰政治力強」。SRE 的非官方座右銘:「希望不是策略(Hope is not a strategy)。」
怎麼形成預算#
- 產品團隊定義 SLO(季度可用度目標)
- 用獨立第三方(監控系統)測實際可用度
- 兩者差值即「不可靠額度」——這就是錯誤預算
- 只要預算還在,新版本可以推;若耗盡,發佈暫停以投入加固
例:SLO 99.999%,預算 = 0.001%;某次事件燒掉 0.0002%,等於用掉 20% 的季預算。
為什麼有效#
- 把對立的兩端對齊到共同指標
- 預算充裕時,開發團隊可大膽冒險;預算將盡時,開發自己會喊「慢一點、加測試」
- 連網路或資料中心級故障也會吃預算,全隊一起承擔上線責任
- 若一直發不出新功能,可選擇放寬 SLO換得創新空間——預算讓「過度可靠」的代價變得可見
更精細的控制不必是「全有或全無(bang-bang)」,也可在預算將盡時放慢發佈、自動回滾。
關鍵洞見#
- 管理可靠性 ≒ 管理風險,而管理風險是有成本的
- 100% 幾乎永遠不是對的目標:做不到、使用者也感受不到
- 錯誤預算讓 SRE 與開發共同擁有「上線決策權」,把「事故 vs. 速度」的爭辯從情緒帶回數據