SRE 是什麼?從 Error Budget 講起

· tech

#sre#reliability

「SRE」這個詞很紅,但很常被誤解成「高級一點的維運」或「會寫程式的 SysAdmin」。讀完 Google 這本書我的體會是:它的靈魂根本不在職稱,而在一個轉念 + 一個機制——「100% 可靠不是對的目標」,以及用 Error Budget 把「開發要快 vs 系統要穩」這場永恆戰爭,變成一道兩邊一起算的數學題。這篇是整個系列的脊椎,先把這兩件事講透。

SRE 是什麼:讓軟體工程師來做維運

Google 對 SRE 的原始定義很妙:「當你叫一個軟體工程師去設計維運團隊,會發生的事。」 一句話——把維運當成一個軟體問題來解,而不是用人力去堆。傳統維運遇到「事情變多」的答案往往是「加人」,人數跟著服務規模線性長;SRE 的答案是「寫程式把它自動化掉」,讓人力跟規模脫鉤。這個出發點,決定了後面所有實務的味道:能自動化的就別用人做、重複的手動操作被當成「待消滅的東西」而不是「認命要做的雜事」。

先破一個迷思:100% 可靠是錯的目標

大多數人直覺覺得可靠度當然是越高越好、最好 100%。但 SRE 的第一個反直覺是:追求 100% 不但不對,還有害。

可靠度目標訂在 99.9%,不是 100% 剩下的 0.1% 不是遺憾,是可以花的「預算」 Error Budget = 1 − SLO 服務成功 ≥ 99.9%(SLO 目標) 失敗 ≤ 0.1% (刻意放大顯示) ≈ 一個月約 43 分鐘可壞 追到 100%:成本爆炸、邊際效益趨近零——使用者還分不出 99.9% 和 100% (他手上的網路、手機、Wi-Fi 本來就沒那麼可靠)
把可靠度訂成一個「夠好」的目標(SLO),剩下允許出錯的額度就是 Error Budget = 1 − SLO。99.9% 聽起來很嚴,其實一個月還有約 43 分鐘的「壞掉預算」可花

為什麼 100% 是錯的?三個理由:成本——從 99.9% 每往上一個「9」,投入都要翻好幾倍;邊際效益——趨近於零;使用者根本感受不到——他家的網路、手機、Wi-Fi 本來就沒那麼穩,你把後端從 99.9% 拉到 99.999%,他那端的體感一點差別都沒有。所以正確的問法不是「怎麼不出錯」,而是「多可靠才算夠好」——訂一個目標(SLO,下一篇專講),剩下那段允許出錯的額度,就叫 Error Budget

Error Budget:把 dev vs ops 的戰爭變成數學

Error budget 真正的威力,是它化解了一場幾乎每個團隊都在打的仗:開發想快、想多推功能;維運想穩、不想亂動。 這兩邊的目標天生對立,傳統上只能靠吵架、比職級、或 politics 決勝負。Error budget 給了一個客觀的公親:

開發(Dev) 想快、多推新功能 Error Budget = 1 − SLO 維運(Ops) 想穩、少變動 兩邊都看這個做決定 還有預算 → 綠燈:放手發布新功能、可以承擔風險 預算燒光 → 紅燈:凍結發布,全隊回頭修穩定 衝突從「吵架、比職級」變成「看同一個數字」——兩邊利益一致
Error budget 是 dev 和 ops 的共同公親:還有預算就綠燈、放手發布;燒光就紅燈、全隊回頭修穩定。決策依據從嗓門與職級,變成一個客觀的數字

機制很簡單:還有 error budget → 綠燈,可以大膽發布、上高風險功能,反正壞了還在預算內;預算燒光 → 紅燈,凍結所有新功能發布,全隊回頭把穩定度修回來。妙的地方是它讓兩邊利益一致了——維運不會再無腦擋所有變動(因為「還有預算」就沒理由擋),開發也不會再無腦硬推(因為燒光了大家一起被凍結)。大家都變成想「把有限的預算,花在最值得的功能上」。

反思

error budget 最強的地方,不是技術,是把「吵架」變成「看數字」

我在不同團隊都看過同一齣戲:要不要上這個有點風險的功能,開發和維運各執一詞,最後往往是誰嗓門大、誰職級高、誰跟主管關係好就贏。這種決策方式很消耗、也很不公平。Error budget 的設計之所以讓我拍案,是它把一個人的衝突,轉成了一個客觀的量化問題——「我們這個月的預算還剩多少?」兩邊不再是敵人,而是同一個預算的共同管理者。這是我看過最漂亮的「用機制化解人性衝突」的例子;它提醒我,很多團隊裡的爭執,根源是缺一把公認的尺,而不是缺道理。

「100% 不是目標」幾乎是所有工程判斷的通則

「別追求完美,追求夠好」這句話,遠不只適用於可靠度。過度追求任何指標——100% 覆蓋率、零技術債、極致效能——本質都是過度工程,把資源砸在邊際效益趨近零的地方。這跟我一直在講的 先確認痛點,再上重武器是同一種紀律:先問「多好才算夠」,再決定投入多少。 多數系統根本不需要五個九;把追求那兩個多餘的「9」省下來的力氣,拿去做真正會被使用者感受到的事,划算太多。SRE 用 error budget 把這個判斷制度化了,而我把它當成看任何工程取捨的預設問句。

SRE 的內核:維運可以、也應該被工程化

這本書最打動我的底層信念是:維運不是「認命要做的雜事」,而是一堆「還沒被工程化的問題」。 一旦你把重複的手動操作看成待消滅的 bug、而不是宿命,你的行為就變了——你不會再被 on-call 追著跑、疲於奔命,而會主動去想「這件事怎麼自動化掉、以後不用再有人半夜爬起來」。這個心態轉變,比任何工具或流程都重要,它決定了你是維運的奴隸還是主人。後面會講的消除 toil、監控、自動化,全都是這個信念的展開——而它的起點,就是這篇的 error budget:先量化「多穩才夠」,才談得上聰明地把力氣花在刀口上。