GH GambleHub

Zero-Downtime部署

(部分: 體系結構和協議)

1)什麼是Zero-Downtime,為什麼需要

Zero-Downtime(ZDT)是發布應用程序新版本的一種方法,而用戶無需該服務,並且不會丟失請求。目標是:
  • 零方便客戶和集成。
  • 可預測的發布、快速回滾和可管理的風險。
  • 將SLO/SLI(潛在性,錯誤,可訪問性)保留在安排範圍內。

ZDT的關鍵不是單一「魔術」技術,而是交付模式,數據兼容性和可勝任的流量路由的組合。

2) Zero-Downtime基本原則

1.版本兼容性:新版本和舊版本必須同時正確處理流量和數據。
2.操作的相等性:重復處理不應破壞狀態。
3.優美的完成(graceful shutdown)和連接排水。
4.循序漸進的健康檢查:準備/生活樣本,健康結束。
5.作為頭等艙公民回滾:回滾比hotfix更簡單、更快。
6.通過設計可觀察性:發布標簽,單個dashbords,SLO上的差分。
7.自動化:發布和回滾腳本-代碼而不是手動說明。

3)沒有市中心的交付模式

3.1 Rolling Update

漸漸地,我們將舊版本的一些實例從流量中刪除,將它們更新到新版本,然後返回池。

優點: 經濟的基礎架構,只是k8s/ASG.

缺點:有一段時間群集同時運行兩個版本(version skew)。

3.2 Blue-Green

兩個完整的程序堆棧:主動(藍色)和候選人(綠色)。切換流量-原子翻轉。

優點:瞬間回滾,清潔隔離。
缺點:基礎架構的↑成本,與靜態更難。

3.3金絲雀/漸進式滾動

我們給出新版本的流量的一小部分(1-5-10-25-50-100%),並按指標給出門。

優點:最小爆炸射線,數據驅動解決方案。
缺點:需要成熟的可觀察性和智能路由。

3.4 Shadow traffic / Dark launch

我們將真實查詢鏡像到新版本(未回復用戶)或隱藏運行以收集指標。

優點:及早發現問題。
缺點:成癮的雙重負擔,需要控制副作用。

4)交通和連接管理

4.1 Readiness/Liveness

Liveness告訴管弦樂隊「重新啟動我」。

準備就緒-「不引導流量,我還沒有準備好。」

沒有正確的準備邏輯和時間限制,就無法發布。

4.2連接排水(連接排水)

在將實例從池中刪除之前:
  • 停止接受新的連接,
  • 等待活動結束,
  • 打斷「盤旋」的時間。

4.3 Sticky會話和L7路由

Sticky在靜態場景中很有用,但是使負載平衡復雜化。
L7規則(路徑,標題,cookie,API版本)適用於金絲雀/環。

4.4長壽化合物

WebSocket/gRPC流式傳輸:在升級之前,啟用drain mode+信號「GOAWAY」。
規劃Windows以勝過客戶的Stream和Backof Retrai。

5)數據互操作性和數據庫遷移

5.1 Expand-Migrate-Contract

1.Expand:添加新的列/索引/表格,而不破壞舊版本。
2.Migrate:以背景和偶數方式傳輸數據(batchi,chekpoints)。
3.合同:我們只有在穩定後才能刪除舊的合同。

5.2個實踐

在發布窗口中避免獨家DDL鎖定。
驗證API/事件合同 (schema registry, CDC)。
對於大量遷移-在線工具、副本、分階段切換。
雙環記錄(雙寫),只有重復數據消除和偶數用戶。
Outbox/Inbox可通過隊列進行可靠的集成。

6)緩存,會話和背景任務

會話和緩存是外部(Redis/Memcached),因此版本可以互換。
在打開池之前加熱緩存/jit/速度索引。
按版本劃分背景隊列,或使用領先優勢避免比賽。

7)SLO的可觀察性和門戶

Golden signals: p95/p99潛伏期,error rate, RPS, saturation,排隊。
業務SLA:授權,轉換,成功付款,漏鬥步驟故障。
大門:只有當金絲雀≤基線+降解閾值並且錯誤預算不燃燒時,滾動才能推進。

8)安全完成和回滾

回滾是相同的管道,只是相反的:固定的命令,不是「手工藝品」。
對於藍綠色-翻轉;金絲雀-重量減至0%或前一個穩定步驟。
數據:補償事務、重復處理、事件重復數據消除。

9)零下時間支票清單

發布之前

  • 收集了一個簽名的工件(immutable),SBOM和依賴性檢查。
  • Readiness/Liveness已實施和測試。
  • 外包模式下的遷移計劃,可逆性得到確認。
  • 新版本的Dashbords和Alertes已準備就緒,發布標簽已滾動。
  • 回滾已在staging/pre-prod上驗證。

發布期間

  • 連接排水包括在內,taymouth是足夠的。
  • 流量將逐步轉移(金絲雀/環)或翻轉(藍綠色)。
  • 將度量標準與基線進行比較,並遵循門檻。

發布後

  • N小時後監測,沒有事件。
  • 合同遷移已完成,臨時標誌/路線已刪除。
  • 回顧,更新花花公子。

10)反模式

無排水的Recreate Deploy和Readiness ⇒請求的懸崖。
未經準備的DDL在黃金時段⇒鎖定和定時。
在服務版本之間混合不兼容的方案。
處理者和鍛煉者缺乏同位素。
「感覺不好」,沒有門和基線比較。
藍綠色時長DNS-TTL,導致翻轉持續數小時。
滾動/金絲雀時實例內存中的本地會話/緩存。

11)實施方案

11.1 Kubernetes (rolling + canary)

Deployment с `maxUnavailable=0`, `maxSurge=25%`.

準備等待預熱(緩存初始化、次要遷移)。
服務-mesh/Ingress帶有重量路由功能(1-5-10-25-50-100%)。
Alerts: p95, 5xx, lag隊列,業務漏鬥。

11.2藍綠色在雲中

平衡器後面的兩個堆棧是'藍色。example.com` и `green.example.com`.

預熱綠色,煙霧/倒退,然後是聽者/路線交換(或低TTL DNS切換)。
有問題時-即時翻轉。

11.3 Stateful服務

數據副本+在線遷移;雙讀與驗證。
背景喬巴通過「領導」版本或分隊進行傳輸。
實例外的會議/緩存;sticky只是暫時打開。

12) Ficheflagi和客戶端應用程序

新的fici被旗幟激活(細分:員工→ beta →所有)。
對於移動/臺式機客戶端,請考慮協議兼容性邊界和舊版本的生存能力(deprecation policy, server side fallback)。

13)生產力和成本

滾動更便宜,但需要謹慎的兼容性。
Blue-Green在發布時更昂貴,但會立即回滾。
金絲雀平衡風險和成本,但需要強大的可觀察性。
通過ephemeral預覽和自動清潔看臺節省費用。

14) ZDT最低參考線

1.Build:單個工件,簽名,SBOM。

2.Test: unit/integration/contract + security.

3.Staging: smoke,負載,expand模式遷移,回滾檢查。
4.Prod:陰影→金絲雀(網關)或藍綠色翻轉。
5.後處理:監視,合同清潔,復古。

15)簡短摘要

Zero-Downtime是一門學科:兼容版本+正確路由+受控遷移+可觀察性和快速回滾。選擇上下文(滾動、藍綠色、金絲雀)下的模式,自動化SLO網關,保持數據等效性-發布將不再是事件,成為可靠的例行過程。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。