像 Google 這類網路公司能以遠快於傳統公司的節奏推出新產品與功能。SRE 的角色是在不犧牲穩定性的前提下加速變更。Google 為此設置了專門的 Launch Coordination Engineer(LCE) 團隊。

開場案例:Keyhole(為 Google Maps / Earth 提供衛星圖)平日數千 QPS,2011 年聖誕夜(與 NORAD 合作的 Track Santa 活動)達到 25 倍尖峰、超過 100 萬 QPS——這類「硬截止 + 大幅流量未知」就是 LCE 的舞台。

上線是什麼#

「Launch」= 引入使用者可見變更的任何新程式碼。

Google 高速變更的反面就是需要一套經過深思的上線流程——LCE 就是答案。

LCE 的職責#

LCE 在服務生命週期的多個時點審查。職責包含:

  • 在新產品 / 服務上線前查核
  • 對新接 SRE 支援的服務做 service audit
  • 教育開發者最佳實踐、整合內部服務的方式

為什麼需要專責團隊#

專責 LCE 帶來的優勢:

  • 跨產品經驗的廣度
  • 跨職能視角(SRE、研發、PM、行銷)
  • 客觀性:作為非派系顧問,介於各方之間

LCE 是 SRE 角色,因此優先順序仍是可靠性——其他誘因結構的公司可能需要不同設計。

良好上線流程的標準#

Google 十年磨出的標準:

  • 輕量:對開發者友善
  • 強韌:抓得到明顯錯誤
  • 徹底:重要細節一致、可重複
  • 可規模化:能處理大量簡單上線與少量複雜上線
  • 可調整:對新類型上線也有效

對策:

  • 簡單:把基本盤做對,不為每個邊角設計
  • 高接觸:經驗豐富的工程師按需客製
  • 快速常見路徑:常見上線(如新增語言)有極簡流程

工程師會繞過他們覺得過重的流程——尤其在 crunch mode。LCE 必須持續優化「成本 / 效益」平衡。

上線檢查清單#

檢查清單像航空起飛清單或手術清單——降低疏漏、確保一致。

清單會不斷膨脹。Google 曾要求新增題目必須經 VP 批准。

維持小巧的原則:

  • 每個問題的重要性都要有依據(最好是過去災難)
  • 每個指示要具體、實際、可達成

涵蓋的主題#

  • 架構與依賴:請求流、是否誤用共享基建
  • 整合:DNS、LB、監控、機器配置
  • 容量規劃:launch 尖峰可能比預估高 15 倍;分區域漸進上線
  • 失敗模式:單點故障、依賴不可用、DoS、降級模式
  • 客戶端行為:自動同步、心跳——必須指數退避 + jitter
  • 流程與自動化:手動流程必須文件化,任何成員能執行
  • 開發流程:版控、release branch、設定也納入版控
  • 外部依賴:第三方程式碼 / 服務 / 資料;事前規劃緩解措施
  • Rollout 計畫:複雜上線需要編舞,含應急方案

上線常用技術#

漸進式 rollout#

Google 幾乎沒有「按鈕全球上線」這種事。

  • 先一兩台「canary」觀察
  • OK 後一整個 DC
  • 再全球
  • 自動化工具觀察 canary 一段時間,異常即自動回滾

Android app 升級也以「漸進式安裝百分比」執行——既可觀察伺服器影響也能早期偵測問題。

「邀請制」「按日限制註冊數」也是漸進式 rollout 的一種。

Feature Flag 框架#

不必為所有變更走重磅 launch 流程——尤其 UI 微調或早期實驗。需求:

  • 多個變更平行 rollout,每個只到少數使用者 / DC
  • 從 1% 漸進到 10%
  • 依使用者 / session / 物件 / 位置路由
  • 失敗時自動「不影響使用者」回退
  • 每個變更可獨立立即關閉
  • 量測每個變更對使用者體驗的影響

兩大類:

  • 純 UI 改進(HTTP payload rewriter 於前端)
  • 任意 server-side / 業務邏輯(依使用者 ID / 物件 ID 路由到不同伺服器)

處理失序的 client 行為#

Client 把 60s 同步改成 600s 同步 → 流量 ×10。Retry 不當會把過載服務雪上加霜。

必要設計:

  • 指數退避 + jitter(隨機化延遲):避免「重試浪潮」與「夜晚 2 點同步爆量」
  • 區分可 retry 與不可 retry 錯誤(4xx 不該 retry)
  • server-side 可遙控 client:透過設定檔開關功能、調整 sync / retry 頻率
  • 預先把功能放進 app(dormant),由 server 啟用 → 出錯時直接關掉、不必重發版本

過載行為與壓力測試#

真實服務的負載不是線性——快取效應、JIT 暖機讓低負載時反而比較慢;接近過載時常突然失控。

範例:某服務在 backend 錯誤時記 debug log,過載時 log 本身比正常處理還貴 → 進入 GC thrashing → 整服務 freeze。

因此壓力測試是上線的必備——既為可靠性,也為容量規劃。

LCE 的演進#

Google 早期由「Launch Engineers」這個志願小隊撰寫起飛清單;隨服務複雜化於 2004 年成立 LCE 全職團隊。3.5 年內一名 LCE 跑了 350 場 launch,5 人團隊全期超過 1,500 場。

新進 LCE 約需半年訓練;後期把「低風險 launch」(無新 binary、流量增量 < 10%)分流走極簡流程——到 2008 年 30% 的審查屬此類。

LCE 解決不了的問題#

一些問題超出 LCE 範圍,需要全公司的長期投入:

  • 規模轉變:用量超出預期兩個量級時,需要重新架構並遷移使用者
  • 運維負擔成長:告警噪音、部署複雜度逐年增加,需主動清理(呼應第 5 章 50% 上限)
  • 基建擾動(churn):底層 cluster / 儲存 / LB 變動 → 服務團隊「跑很快才能留在原地」;解法是「churn reduction policy」——基建團隊釋出向後不相容變更時必須同時提供自動遷移工具

這些需要更好的平台 API、framework、CI / CD 自動化與標準化。

結語#

對於每 1–2 年產品開發者翻倍、服務規模億級的公司,LCE 這類角色能在「速度」與「可靠」間建立紀律性的橋樑

Google 十年來累積的清單、流程、心法——希望能啟發其他面對相似挑戰的組織。