本章提供了一份 SRE 組織從零到成熟的完整路線圖,涵蓋從尚未有 SRE 人員但有志實踐 SRE,到建立穩健且可能跨地域分佈的多個 SRE 團隊的各個階段。無論組織目前處於哪個階段,都能從中找到適合的演進策略。

沒有 SRE 也能實踐 SRE#

即使組織中沒有任何 SRE 人員,仍然可以透過 SLO 來採用 SRE 實務。本章提出第一條 SRE 原則:

原則 #1:SRE 需要有後果的 SLO (SLOs with consequences)。服務相對於 SLO 的表現應引導商業決策。

在沒有任何 SRE 的情況下,組織可以採取以下關鍵步驟:

  • 承認你不需要 100% 的可靠性
  • 設定合理的 SLO 目標,衡量對使用者最重要的可靠性指標
  • 制定 Error Budget Policy,用以引導戰術性的中斷緩解行動,以及長期的可靠性改善工作
  • 實際量測 SLO 並承諾遵循 Error Budget Policy,這需要公司領導層的同意

啟動 SRE 角色#

尋找第一位 SRE#

第一位 SRE 可能不具備明確的 SRE 經驗,但以下領域的技能在面試中特別重要:

  • Operations:實際運行生產環境應用程式的經驗
  • 軟體工程:理解並改善所支援的軟體
  • 監控系統:SLO 的量測與追蹤
  • 生產環境自動化:擴展運維需要自動化
  • 系統架構:擴展應用需要良好的架構設計

安排第一位 SRE 的位置#

可以選擇將第一位 SRE 嵌入以下三種位置之一:

  • 產品開發團隊中
  • 營運團隊中
  • 橫向角色,跨多個團隊提供諮詢

選擇時需考量自身的影響力範圍、當前面臨的挑戰、未來 12 個月預期的挑戰、組織變革計劃,以及該 SRE 個人的背景與技能。

引導第一位 SRE#

第一位 SRE 的首要任務是熟悉服務,理解目前的問題、所需的 toil,以及維持 SLO 所需的工程工作。此時第二條原則登場:

原則 #2:SRE 必須有時間讓明天比今天更好。

初期專案工作可能聚焦於改善監控、處理事後檢討中的高優先級項目,或實作自動化以減少特定 toil。需要留意 SRE 工作異常的跡象,例如工作內容與其他工程師無異、承擔了不成比例的運維工作,或 SLO 未被認真對待。

分散式 SRE#

若組織沒有獨立的 SRE 團隊,務必為分散的 SRE 建立社群,倡導 SRE 的獨特角色,並推動跨團隊的一致性可靠性實踐。

建立第一個 SRE 團隊#

建立團隊的方式由簡到繁包括:

  • 作為重大專案的一部分建立新團隊
  • 建立橫向 SRE 團隊
  • 將現有團隊(如營運團隊)轉型

第三條原則在此適用:

原則 #3:SRE 團隊有能力調節自身的工作負載。

Tuckman 團隊發展模型的應用#

本章以 Tuckman 的績效模型(Forming、Storming、Norming、Performing)來描述團隊建立的各階段。

Forming(組建) – 團隊應具備以下綜合能力:

  • 修改應用程式軟體以提升可靠性和效能
  • 編寫軟體以加速問題偵測、自動化手動流程
  • 建立強健的軟體實務標準
  • 對運維變更有條理且審慎的方法
  • 理解分散式系統架構

Storming(磨合) – 團隊需要開始協作,與彼此及其他團隊良好合作。在此階段存在多種風險:

  • 新團隊作為專案一部分:風險包括職責範圍過大、過度沉迷於完美的 SLO 定義、放棄 SRE 原則以滿足產品里程碑等。緩解方式包括先專注單一重要服務、盡早參與設計階段、明確定義 SRE 接手服務的條件。
  • 橫向 SRE 團隊:風險在於被視為新的「關卡」組織。緩解方式是以受尊重的工程師為種子、聚焦交付對其他團隊有短期效益的工具、自視為賦能者而非守門人。
  • 就地轉型團隊:風險包括團隊擔心自動化取代工作、缺乏軟體工程技能等。緩解方式包括取得高層支持、重新協商職責以創造餘裕、提供培訓、改變績效評估指標。

紐約時報案例:其 Delivery and SRE 部門將既有團隊轉型為 SRE 團隊。關鍵策略是反轉責任模型,賦能產品開發團隊自助推送變更,並透過每日 office hours 批量處理問題,最終達成 SRE 團隊超過 50% 時間用於專案工作的目標。

Norming(規範) – 團隊應達到以下成熟度:

  • SLO 和 Error Budget 已就位,Error Budget Policy 在重大事件後被執行
  • On-call 輪班制度已建立且可持續
  • Toil 已被記錄、限制和管理
  • 事後檢討文化已扎根
  • 團隊定期進行訓練演練(如 Wheel of Misfortune 或 DiRT)
  • 產品開發團隊持續參與 on-call 輪班
  • 團隊定期產出利害關係人報告

Performing(展現績效) – 在最終階段,應期望:

  • 參與所有架構設計與變更:SRE 從設計初期就定義軟體建構和可靠性的模式
  • 完全的工作負載自主權:團隊持續應用原則 #3,並以系統整體健康為考量

SRE 團隊可以透過拒絕接手、降低 SLO、將運維工作轉移回開發團隊等方式來調節工作負載。若 SRE 已解決了服務的所有問題,應考慮接手新的可靠性挑戰或將服務交還開發團隊,否則團隊會因缺乏挑戰而流失人才。

擴展更多 SRE 團隊#

因服務複雜度而拆分#

當服務過於複雜時,可以按以下方式拆分:

  • 架構拆分:例如前端/後端、計算/儲存/網路
  • 語言拆分:依程式語言分組
  • 地點拆分:與應用開發辦公室對齊

拆分時要注意「無主」元件的風險——確保每個元件都有明確的負責團隊。

SRE 推廣#

優先考慮以下服務提供 SRE 支援:

  • 可靠性對財務或聲譽有高度影響的服務
  • 產品正常運作所需的最小可行服務集合
  • 服務不應僅因為不可靠就成為 SRE 優先項——SRE 應策略性地應用於對業務最相關之處

地理拆分#

Google 通常在不同大洲建立姐妹 SRE 團隊,原因包括:

  • 服務可靠性:一個團隊因重大事件無法運作時,另一個可以接手
  • On-call 壓力:12 小時輪班允許合理的休息
  • 招募與留才:與正常工作時間重疊的 on-call 輪班擴大了招募基礎
  • 生產成熟度:跨站責任分擔推動了文件、培訓和標準化的改善

時區選擇:6 到 8 小時的時差效果最佳,可避免凌晨 0 點到 6 點的 on-call 輪班。團隊人員應盡量通過內部調動來建立新站。

避免「夜班」效應:確保非共置辦公室的團隊不會承擔過多 toil、只被分配較不有趣的專案。實務建議包括:

  • 平衡兩地的 on-call 負載
  • 將開發領域與特定辦公室的 SRE 團隊關聯
  • 在兩個辦公室之間公平分配最有趣和最有影響力的專案
  • 跨站拆分專案以促進辦公室間的互動
  • 允許工程師定期出差到另一辦公室

三班制的問題:Google 嘗試過三個站點的拆分,但發現無法召開所有人都能參加的跨站生產會議、更難確保知識和能力的均等、減少了自動化低價值工作的動機。

管理多團隊的建議實務#

Mission Control#

Google 的 Mission Control 計劃讓產品開發工程師在 SRE 團隊中嵌入六個月,學習生產系統和實務,最終參與 on-call。部分工程師選擇留在 SRE,其他人帶著對生產環境的更好理解回到原團隊。

SRE Exchange#

SRE Exchange 計劃讓一位 SRE 花一週時間在不同的 SRE 團隊中工作,觀察工作方式並分享實務經驗,結束後撰寫出差報告。

培訓#

建立標準化的 SRE 培訓課程。Google 的所有新 SRE 都參加為期一週的沉浸式 SRE EDU 訓練,數月後再參加第二系列課程,涵蓋管理重大事件的通用工具和流程。

橫向專案#

由於 SRE 團隊緊密對齊特定服務,容易建立專屬解決方案,導致跨團隊的重複工作。Google 透過橫向團隊(通常由資深 SRE 組成)來建構和運行標準解決方案。

SRE 流動性#

確保 SRE 可以在團隊之間自由調動,這對個人和團隊都很健康:工程師可以找到感興趣的角色、在個人情況變化時調整、在新團隊中擴展經驗、維護不同辦公室間的文化一致性。

Production Excellence#

隨著 SRE 團隊數量增長,Google 定期進行 Production Excellence 審查,由資深 SRE 領導者評估每個團隊的頁面負載、Error Budget 使用量、專案完成率等標準指標,表揚優異表現並為表現不佳的團隊提供建議。

SRE 資金與招聘#

Google 的兩項實務:

  • SRE 資金大部分與產品開發團隊的資金來源相同——可靠性是產品開發的核心支柱
  • SRE 的供給始終小於需求,確保定期審查和優先排序接受 SRE 支援的服務

Google 的 SRE 與產品開發團隊工程師比例從約 1:5(低層基礎設施服務)到約 1:50(使用標準框架的消費者應用),多數服務在 1:10 左右。

結論#

任何規模的組織都可以透過以下三條原則實踐 SRE:

  1. SRE 需要有後果的 SLO
  2. SRE 必須有時間讓明天比今天更好
  3. SRE 團隊有能力調節自身的工作負載

這些原則已在 Google 多年的大規模實踐中,以及與客戶合作導入 SRE 的經驗中得到驗證,適用於不同類型和規模的組織。