SRE 為何要在規劃階段現身#

SRE 對 production 有「鳥瞰」級的視野:從使用者請求、基礎設施健康到底層程式碼,無一不知。把這層知識帶到設計初期,可以讓系統一出生就具備:

  • 擴充能力
  • 自動恢復
  • 高負載處理
  • 完善的錯誤處理

延續旅遊軟體案例:在指標與守門都到位後,新需求又帶來新缺陷。

三個典型缺陷#

缺陷 1:搜尋與比價服務逾時#

  • 服務 1(搜尋)呼叫服務 2(外部競品平台),等 5 秒沒回應就 timeout
  • QA 測試時用假回應,無法重現真實 timeout

SRE 建議:服務 1 加入重試(retry)。第一次 5 秒沒回應,再試第二次。雖然無法控制服務 2,但可以提升自家系統韌性。

Figure 6.6: Search and compare service data flow

缺陷 2:資料庫整個叢集中斷時付款服務失敗#

  • 設計只支援節點層 health check,沒考慮整個叢集中斷
  • SRE 建議:服務取得 400 回應時自動 failover 到另一區域
  • 客戶體驗無感

Figure 6.7: Payment service data flow

缺陷 3:獎勵服務間歇失敗#

  • 獎勵服務仍在舊平台、卻呼叫新平台資料庫
  • 因為舊框架無法擴充而 timeout
  • SRE 建議:要嘛盡早把獎勵服務也搬到新平台,要嘛建一支夜間同步服務把資料推到 cache 提供給獎勵服務查詢
  • 這不是根治,但能立刻提升可靠性

Figure 6.8: Reward service data flow

SRE 在 SDLC 各階段的價值#

  • 規劃:在架構討論時提供 production 視角,挑出設計上的隱患
  • 實作:早一步準備新功能的告警與監控
  • 測試:在混沌測試中加入新場景
  • 部署:依照規劃時的觀察執行健全性檢查
  • 維運:與設計階段的決策一致地監控與調整

規劃階段的 1 小時 SRE 投入,可能省下後期數十小時的修補。SRE 不是開發的後段品管,而是設計的全程夥伴。

Figure 6.9: SRE involvement in the planning phase of SDLC

SRE 作為混沌與效能工程師#

傳統 SDLC 把效能測試交給專責團隊;混沌測試甚至常被略過。SRE 接手這兩件事,是因為他們對 production 最了解。

案例:飯店搜尋服務失靈#

  • 客戶連兩次搜尋飯店都看到「頁面無法載入」
  • SRE 看到 HTTP 400
  • 調查發現:某資料庫叢集整個不可用,負載平衡器嘗試切到另一個實例也失敗
  • 真正的原因是「資料庫不可用且 LB 無法回傳合適錯誤」

Figure 6.10: Search service data flow

為什麼 QA 沒抓到#

  • 測試案例只模擬「單一實例下線」
  • 沒覆蓋「整個叢集下線」這個極端情境

SRE 的解法#

  • 把「整個資料庫不可用」加進混沌測試
  • 開發為服務加入錯誤處理:把資料儲存於記憶體 cache,必要時顯示「應用維護中」訊息
  • 用快取提供結果,給客戶可預期的提示

混沌測試的場景設計就是 SRE 對 production 認知的最佳體現。把 SRE 的視野化為混沌劇本,是設計與運維間最有價值的橋樑。

教訓#

  • SRE 早期介入會把整個 SDLC 的可靠性同步抬高
  • 混沌與效能測試是 SRE 把「production 視野」帶回設計的具體載具
  • 跨階段的協作不能只靠制度——要靠習慣,而習慣靠領導者持續推動