如果系統在正常運作時需要人類操作員介入,那就是 bug。 而「正常」的定義會隨系統成長而改變。 — Carla Geisser,Google SRE
SRE 把時間投入「長期工程專案」而非「運維工作」。為避免「運維」一詞被誤解,Google 用一個更精準的詞——瑣事(toil)。
什麼算瑣事#
瑣事不等於「我不喜歡的工作」,也不等於行政雜事或繁瑣工作。每個人的偏好不同,某些人甚至享受重複勞動。
瑣事是「綁在生產服務上的、手動、重複、可自動化、戰術性、無持久價值、且隨服務成長線性放大的工作」。
具備以下特徵愈多者,愈像瑣事:
- 手動(manual):包括手動執行自動化腳本——耗的是人盯著的時間,不是流程跑的時間
- 重複(repetitive):第一次、第二次不算;做到第三、第四次才是
- 可自動化(automatable):機器可同等代勞,或更好的設計可消除這項任務
- 戰術性(tactical):被中斷驅動、反應式,而非戰略驅動、主動規劃。回應 pager 屬此類
- 無持久價值(no enduring value):做完後服務狀態未改善——若有永久改善,則不算瑣事
- 隨服務 O(n) 成長:流量或使用者翻倍就要做兩倍的事
不是瑣事的東西#
- 行政管理開銷(overhead):團隊會議、目標設定(OKR)、週報、HR 文件
- 繁瑣但有長期價值的工作:例如徹底清理告警設定——粗活但不是瑣事
為什麼要少做瑣事#
Google SRE 對外承諾的目標:每位 SRE 投入瑣事的時間不超過 50%,剩餘至少 50% 必須投入工程專案。
理由:
- 瑣事若不約束,會自動膨脹到 100%
- 工程工作才能讓 SRE 規模隨服務「次線性」成長——這是 SRE 的「E」
- 招募新人時這是承諾,必須兌現
瑣事的下限#
SRE 若揹 On-Call,瑣事就有一個下限。例:6 人輪值、每人主要 1 週 + 次要 1 週,光是 On-Call 就佔 2/6 ≈ 33%;8 人輪值則 25%。
Google 季度調查顯示平均瑣事比例約 33%——優於 50% 目標,但有極端值(從 0% 到 80%)。當個別 SRE 報告瑣事過高時,是經理該重新分配負擔的訊號。
瑣事的主要來源#
- 中斷(非緊急的服務相關訊息與郵件)——最大宗
- On-Call 緊急應變
- Release 與 push
什麼算「工程」#
工程工作的特徵:新穎、需人類判斷、產生永久改善、由策略引導。SRE 的活動分四類:
- 軟體工程:寫或改程式碼(自動化腳本、工具、框架、可擴展性與可靠性的功能、基礎建設程式碼加固)
- 系統工程:一次性的配置改動產生長期效益(監控設定、負載平衡配置、伺服器調校、OS 參數、為開發團隊做生產化諮詢)
- 瑣事:如上定義
- 管理開銷:行政性質、與服務無直接關聯
「50% 工程」是以幾季或一年為單位的平均值。瑣事有突發性,某季略低於 50% 不可怕;若長期顯著低於 50% 就是警訊,需團隊回頭檢視。
瑣事一定是壞事嗎#
少量瑣事不一定不好——可預期、低風險、能帶來快速完成感,部分人甚至偏好這類工作。問題在於量。
過量瑣事會引發以下惡果:
- 職涯停滯:粗活有獎勵,但無法靠粗活建立職涯
- 士氣低落:每個人耐受度不同,但都有上限——超過會 burnout
- 造成混淆:對外造成「SRE 也是運維部門」的錯覺
- 拖慢進度:SRE 忙於救火,功能上線速度降低
- 塑造先例:愈樂意接,開發團隊愈會把運維工作丟過來
- 促成流失:團隊最好的工程師會去找更有挑戰的工作
- 違背招募承諾:新進 SRE 期望做工程,發現都在做瑣事 → 士氣受傷
結語#
若每人每週都用好的工程手段消除一點瑣事,整個服務就會持續變乾淨。把集體精力投入下一代服務設計與跨團隊工具——多發明、少瑣事。