兩者的共同基因#

SRE 與 DevOps 都是為了打破開發與運維的穀倉而誕生,雖然策略不同,但底層目標一致——用速度交付品質,回應快速變化的終端需求。

為何兩者經常並行#

  • SRE 著重設計與實作高度可擴充、有韌性的系統,並強化運維面:加速運維、消除 toil、支援開發
  • DevOps 著重以溝通與自動化工具促進開發與運維協作:支援開發者更快寫程式、確保品質並順利部署

兩者像是分工合作的雙人組:DevOps 把開發到部署這條主流程鋪平;SRE 在 production 端把關可靠性,並把 production 經驗回饋到設計與開發。

案例:電商支付平台的兩種命運#

沒有 DevOps 與 SRE 的版本#

  • 業務分析、架構師、設計師、系統管理員協作出設計文件
  • 系統管理員手動配置基礎設施
  • 開發者自行建置整合與部署
  • 測試與修補在多個 sprint 中往返
  • 末段若 QA 發現多個缺陷、自動化又失效,開發者可能為了趕時程而手動把劣質程式碼部署到 production

Figure 2.2: Representation of SDLC: DevOps and SRE replaced by system admin and operation

加入 DevOps 與 SRE 的版本#

  • 文件包含 SRE 從舊系統累積的歷史洞見,架構更紮實
  • DevOps 重用 CI/CD 工具,把測試也整合到同一條管線
  • DevOps 以工具配置基礎設施
  • SRE 同步建立監控儀表板與告警,預先擴充 CPU 與記憶體
  • 開發者只需要寫程式碼,建置、部署、測試由管線自動完成
  • DevOps 在開發與 SRE 之間開出資料管道,把缺陷報告與變更同步給 SRE
  • SRE 審查通過後,DevOps 才會把程式碼推上 production
  • production 出問題時,SRE 可把流量切換到舊平台、同時排錯

同一支團隊、同一個需求,加上 DevOps 與 SRE 後,從「為了趕工而妥協品質」變成「自動化與守門共同保障品質」,這就是兩個方法論共存的價值。

Figure 2.3: Representation of onboarding SRE and DevOps to effectively deliver quality on time

五大共通實務#

SRE 與 DevOps 在以下面向高度重疊:

1. 結構化的方法(Structured approach)#

  • 在每個開發階段都有清楚的任務定義、角色、流程、標準、工作流與資料流
  • DevOps 用清晰的 CI/CD 標準、變更管理流程、開發與運維協作流程
  • SRE 用事件管理、變更管理、守門控管、自動化與運維分工等規範化流程

2. 自動化(Automation)#

  • 共同目標:減少 toil、節省人力、降低人為錯誤
  • DevOps:建構 CI/CD 管線,自動化建置、部署、基礎設施配置
  • SRE:自動化監控、告警、事件管理、自動修復;同時打造工具讓開發者能在開發環境模擬 production 情境

3. 品質控管(Quality control)#

  • 兩者都把品質納入關鍵績效指標(Key Performance Indicator, KPI),與自動化高度交織
  • DevOps:以 CI/CD 杜絕手動 commit 與發布,多輪 code review 與一致的環境配置
  • SRE:定義「什麼變更、何時、如何進入 production」,要求 DevOps 把這些控制嵌入管線;並在上線前與開發、測試共同 review 缺陷

4. 量測(Measuring)#

  • 組織必須在每個層級都有指標,才能評估 SDLC 表現
  • DevOps 指標:建置時間、修補時間、部署時間、開發頻率、變更前置時間(lead time for changes)、變更失敗率
  • SRE 指標:系統可用性、production 變更失敗率、平均修復時間(MTTR)、平均故障間隔(MTBF)

5. 變更管理(Change management)#

  • 是把 SRE 與 DevOps 緊密綁在一起的核心元素
  • SRE 訂定流程:變更時程、可允許範圍、多重審批、影響評估、回退選項
  • DevOps 把上述流程內建到管線:例如 CD 管線比對 production 與變更後設定,若違反 SRE 規則則直接擋下;或是把審批流程嵌進管線,未審批前不繼續

把規範寫成文件還不夠——關鍵是讓自動化管線去強制執行這些規範,這樣品質與可靠性就不再倚賴個別工程師的紀律。