系統架構筆記 - 常見的五種部署策略

strategies

這篇文章簡單紀錄了常見的五種部署策略: Big Bang Deployment、Rolling Deployment (滾動部署)、Blue-Green Deployment (藍綠部署)、Canary Deployment (金絲雀部署) 與 Shadow Deployment (影子部署)。

Big Bang Deployment

名字聽起來很 Dramatic 的部署策略,將舊版本完全下線後部署新版本。

  • 優點:
    • easy、一次性完成
  • 缺點:
    • 有 downtime,一般生產環境下不會使用

Rolling Deployment (滾動部署)

rolling

將舊版本逐步 (one by one) 更新為新版本,在這個過程中,舊版本和新版本會共存一段時間。

  • 優點:
    • no downtime
  • 缺點:
    • 新舊版本間沒有隔離,可能需要處理版本之間的相容性與數據一致性
    • rollback 也是逐步滾回去,複雜且耗時

Blue-Green Deployment (藍綠部署)

blue-green

同時維護兩個平行的環境,一個為主要環境 (Blue),另一個為即將上線的新版本 (Green),於測試環境測試完新版本後,直接將兩個環境的流量做切換。

  • 優點:
    • no downtime
    • 直接切換流量即可完成版本切換,rollback 也是
  • 缺點:
    • 要同時維護兩個環境,成本高

Canary Deployment (金絲雀部署)

canary

將新版本釋出給少量用戶做測試,測試沒問題後才將剩下的部署為新版本。

  • 優點:
    • no downtime
    • 能於生產環境中評估新版本效能,降低新版本風險
    • rollback 較容易
  • 缺點:
    • 部署時間較長
    • 某些問題無法靠少量用戶就發現
  • 與 Rolling Deployment 的差異
    • Canary Deployment 是階段式的過程,先部署少部分,確定沒問題才擴大部署
    • Rolling Deployment 則連續的過程,一次對整個系統做升級,只是過程上是逐步部署

Shadow Deployment (影子部署)

同時維護兩個平行的環境,新版本在幕後運行 (in the shadow),使用者的 request 會被複製一份到新版本用於測試

  • 優點:
    • 不會對使用者造成實際影響,同時能測試新版本效能
  • 缺點
    • 實作上比較困難
    • 成本高

其他: Feature Toggle

feature-toggle

封面的圖片裡還有提到一個 Feature Toggle,概念是在程式中設計一個開關來控制新功能的狀態,可以針對特定用戶開啟,用來觀察新功能的效能、反饋如何,通常是用來做 A/B Test,本質上跟前面提到的幾個部署方法有點差異。