Logo GH

藍綠色和金絲雀發行

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

1)為什麼需要「安全推出」

在現代系統中,發布不僅是代碼交付,而且是銷售中的托管實驗:我們同時將風險降至最低(不破壞用戶),並縮短反饋時間(快速看到效果)。Blue-Green和Canary這兩個經典策略以不同的方式解決了這個問題,但其共同目標是:零下移,快速回滾,SLO可觀察性。

2)基本定義

Blue-Green

我們擁有兩個完整的prod環境副本:主動(藍色)服務於流量,被動(綠色)準備新版本。切換-平衡器/路由器級別的原子(switch/flip)。如果情況變得更糟-立即回到藍色。

Canary

我們分批推出:首先,很小比例的流量(例如1-5%),觀察指標/SLO,然後逐步增加份額(10%→ 25%→ 50%→ 100%)。退化-在上一個穩定步驟中回滾或停止。

3)哪種方法更好

Blue-Green-如果選擇:
  • 我們需要一個沒有復雜操作的即時回滾。
  • 體系結構/預算允許雙重基礎架構重復。
  • 我們希望孤立地進行大規模遷移或平臺更新(OS/JDK/rantime)。
  • 附錄/連接池對漸進「混合」狀態敏感。
金絲雀-如果選擇:
  • 您需要最小化blast radius並查看用戶份額上的行為。
  • 高發行頻率,逐步交付為常態。
  • 有成熟的可觀察性和自動門(error budget,latency,conversion)。
  • 產品團隊希望驗證假設:對轉換,保留,LTV等的影響。

4)成功發布的一般原則

相同的廣告牌文物:相同的影像/封裝在所有階段。
確定性配置:作為代碼的config,環境的可比性。
設計可觀察性:標誌,度量,軌跡,變量;SLI/SLO提前。
快速、可自動回滾:按鈕/回滾命令是管線的一部分,不是手動魔法。
可互操作的電路更改:expand-migrate-contract策略(參見第10節)。
L7級路由(最好):在標題/cookie/路徑/API版本上具有靈活性。

5) Blue-Green: 架構和流程

5.1個拓撲

兩個程序堆棧:Blue(主動)和Green(候選人)。
常見的外部依賴關系:CDN,外部API,隊列;DB是一種特殊情況(請參見第10條)。
切換點:平衡器/Ingress/Gateway。

5.2階梯式洪水

1.在新的人工制品(vNext)下舉起Green,進行工作服測試。
2.針對Green的自動測試運行(e2e,合同,回歸)。
3.加熱緩存/會話(如果適用),同步背景喬巴/隊列。
4.將流量切換到Green: atomic flip (DNS TTL低,Route/Listener交換,Ingress weight=100%)。
5.在第一分鐘/小時觀察SLO(金色信號:latency, errors, saturation+業務指標)。
6.有問題時-立即返回藍色(翻轉後)。

5.3個優點/缺點

優點:即時回滾,簡單的心理模型,純粹的隔離。
缺點:基礎架構翻倍,復雜性與靜態組件和數據遷移。

6)金絲雀: 架構和過程

6.1個拓撲

單個程序集群;單線後面的多個服務版本(穩定和金絲雀)。
流量按權重(1-5-10-25-50-100%)或目標(按標題/cookie/ID)分開。

6.2階梯式洪水

1.將金絲雀版本丟入同一群集/ASG/NSG。
2.將部分流量(例如1-5%)路由到canary。
3.SLI/SLO自動檢查和業務指標;CI/CD中的網關(error rate,p95 latency,CPU/RES,轉換,故障/退款)。
4.通過門時的流量份額逐步增加。
5.完全滾動至100%,並停用舊版本;退化-自動回滾。

6.3個優點/缺點

優點:大多數用戶風險最小,數據驅動解決方案。
缺點:需要成熟的觀察力,有能力的路由,實例之間「version skew」的風險。

7)流量路由

L4級別:IP/端口平衡;很簡單,但幾乎沒有靈活性。
L7級別:HTTP/S規則-路徑,主機,標頭,cookie,用戶代理,GeoIP,SNI。

技術人員:
  • 重量路由(重量1-100%)。
  • 基於頭部/Cookie(將用戶提交到組)。
  • 會話保持穩定(對於靜態/腰帶腳本很重要)。
  • 影子/交通鏡頭(將查詢鏡像到新版本的「靜止」)。

8)工具和實現(示例)

Kubernetes: Ingress (NGINX, Contour), Service Mesh (Istio/Linkerd), Argo Rollouts, Flagger.

Облака: AWS ALB/ELB, Route 53 weighted records, ECS/EKS;GCP Load Balancing + NEG;Azure Front Door/App Gateway.

CD平臺:Spinnaker,Argo CD,GitHub Actions+Progressive Delivery插件,GitLab/CD。

💡 原則1:版本-代碼、流量-策略、推廣-SLO自動網關。

9)可觀察性,SLI/SLO和門戶

Golden signals: Latency (p95/p99), Error rate (5xx/4xx по типам), RPS, Saturation (CPU/Memory/GC), Queue lag.

業務指標:轉換,授權,付款/成功,平均支票,漏鬥步驟拒絕。

蓋茨:
  • 錯誤閾值(例如,錯誤率金絲雀≤基線+X%)。
  • P95的潛伏期不超過Δ。
  • 業務閾值(例如,轉換下降
  • SLO上的錯誤預算不應加速燃燒。

步驟持續時間:最低時間足以滿足統計意義(取決於流量)。

10)DB遷移和電路兼容性

主要規則:如果版本前後兼容,則發布是安全的。

Expand-migrate-Contract策略:

1.Expand:添加新的列/索引/表格,而不破壞舊版本。

2.Deploy app vNext(閱讀/寫入新方案,但知道如何與舊方案一起工作)。

3.Migrate數據(背景/batch,偶數,帶有checkpoint)。

4.合同:穩定後刪除舊字段/fichi。

反模式:在藍綠色切換時需要獨家鎖定的遷移;該計劃的失敗是不可能的;沒有重復數據消除的「雙寫」。

11)回滾(rollback)和事故計劃

藍綠色:藍色上的即時翻轉;監視綠色背景喬布斯的「尾巴」。
金絲雀:體重回調(例如,從25%回到5%或0%);自動變速箱。
數據:經過深思熟慮的重復/補償政策(idempotency keys, 「inbox/outbox」模式,重復消息消除)。
Ficheflagi:快速殺手開關,關閉部分推出的功能。

12)與牛排和會議合作

加那利群島的粘性會議,或外部存儲會議(Redis/Memcached),以便版本可以互換。
預先預熱緩存(綠色扭曲),並在翻轉時考慮入侵。
背景操作員:不要允許版本之間的「比賽」-根據版本劃分隊列或「領先」。

13)安全性和合規性

Green/Canary訪問-通過Zero Trust:服務帳戶,最低要求角色。
秘密和鑰匙-通過KMS/Secrets Manager;打開旋轉。
流量僅為TLS;endpoint的版本已明確標記;審核路由和發布操作。

14)成本和性能

Blue-Green將基礎架構加倍(在發布期間或永久)-提供預算。
金絲雀更經濟,但需要觀察工具和自動化工程時間。
優化:自動滑動,ephemeral環境,縮短版本並行存在的窗口。

15)支票單

發布之前

  • 映像/票據是從單個來源啟動的,簽名已驗證。
  • 測試計劃、Alerta和SLO門已配置。
  • DB遷移-在expand模式下,可以使用downgrade計劃。
  • 回滾計劃-已像插頭/生產一樣進行測試。

發布期間

  • 度量指標和日誌與基線進行了比較。
  • 對於金絲雀-固定步驟和閾值;對於Blue-Green-防翻轉。
  • 呼叫團隊知道,有反饋窗口。

發布後

SLO沒有下降,錯誤預算正常。

  • 發布後的遷移/清理已完成。
  • 回顧和更新花花公子。

16)頻繁的錯誤和反模式

在沒有指標的情況下推出:沒有數據-沒有可管理的解決方案。
混合不兼容的DB方案,缺乏下行策略。
隨機混合流量:沒有粘性,用戶在版本之間「跳躍」。
隱藏的狀態依賴性(本地驅動器,內存緩存)。
長時間的DNS-TTL會幹擾快速翻轉(藍綠色)。
缺乏自動登機:手動「眼對眼」的解決方案會減慢並增加風險。

17)組合方法

Blue-Green+Canary:首先推出Green,然後在Green內部推出Canary進行單獨服務。
影子/遷移流量:在金絲雀之前,將鏡像流量趕到新版本。
Feature flags(漸進式交付):該功能在穩定版本的上方包含每個段的「深色」標誌。

18)腳本示例(草圖)

Blue-Green (web+api):

1.在新的Listener/Ingress後面部署綠色(v2)。
2.我們熱緩存,我們執行readonly檢查,煙霧。
3.將重量切換為Green=100%。
4.觀看SLO 30-60分鐘;如果所有-關閉Blue。

金絲雀(微型支付服務):

1.Deploy canary vNext (5%復制副本)。

2.包括內部帳戶/測試段的5%流量。

3.自動門:error rate ≤ baseline+0。3%, p95 ≤ +20ms.

4.通過門時,我們將10% → 25% →每N分鐘提高 50%。

5.100%跨所有細分市場翻譯ficheflag;刪除舊版本。

19)不同體系結構的變體

巨石:藍綠色更簡單,金絲雀更復雜,因為仙女不可分割。使用ficheflagi。
微服務:金絲雀是自然的;留意服務間合同(消費者驅動合同)。
Stateful服務:更喜歡Blue-Green和精心設計的遷移和穩定性。

20)簡短比較(摘要)

回滾速度:Blue-Green=瞬間;金絲雀=速度快,但重量減輕。

基礎設施成本: 藍綠色↑;Canary ↔︎/↓.

用戶風險:金絲雀較低(控制份額)。
實施難度:藍綠色更容易啟動;金絲雀需要強大的可觀察性和自動化性。
數據/方案兼容性:兩者都至關重要;計劃expand-migrate-countract。

21)結果

藍綠色和金絲雀不是相互排斥的策略,而是漸進式交付的元素。選擇取決於成本限制,可觀察性的成熟度以及變化的性質。無論采用哪種方法,可持續發布都取決於四個支柱:自動化,可觀察性,向後兼容性和快速回滾。

Contact

與我們聯繫

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

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

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

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