iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
DevOps

連DevSecOps都不知道怎麼發音怎麼開始學習?系列 第 27

Day.27 90% 老版本 + 10% 新版本:金絲雀部署的安全玩法

  • 分享至 

  • xImage
  •  

昨天我們聊過 藍綠部署,重點是「兩個環境準備好,隨時能切換」,就像副本前備好兩隊人馬,打不動隨時換人上。
但現實中,很多時候不是「整隊換掉」,而是「先派幾個人去試試看」。
這就是 金絲雀部署(Canary Deployment)

為什麼要金絲雀?

金絲雀這個比喻來自礦坑
早期礦工會帶金絲雀下礦,因為牠對毒氣很敏感,萬一環境有毒,金絲雀會先出狀況,提醒大家撤退

放到CI/CD就是:

  • 舊版本還在跑(90% 流量)。
  • 新版本先給少量使用者試(10% 流量)。
  • 如果一切正常,再逐步放大。
  • 如果炸掉,只影響到那 10%,其他人完全不受影響。
  • 相比藍綠部署的「一刀切」,金絲雀部署就像是「分流測水溫」,更溫和,也更安全。

架構概念

在我們的環境裡,做法大概是這樣:

  1. App 有兩個版本
  • blue → 舊版本,穩定版。
  • green → 新版本,要測的更新。
  1. 反向代理負責分流
  • 90% 請求導到 blue:8000。
  • 10% 請求導到 green:8000。
  1. 用戶體驗
  • 多數人還在跑舊版,穩定可靠。
  • 少數人「抽中金絲雀卡池」,會先踩到新版本。

Caddy 分流設定

Caddy 的 Caddyfile 就能做到流量分流,我們可以加一段簡單的「隨機權重」:

app.hacuba.site {
	@green {
		random 10%
	}
	handle @green {
		reverse_proxy green:8000
	}

	# 其他 90% 走舊版
	handle {
		reverse_proxy blue:8000
	}
}

這段意思是:

  • 每個請求,Caddy 會隨機抽籤
  • 抽中 10% 的人,進 green(新版本)。
  • 其餘 90%,走 blue(舊版本)。
    就像開卡池,絕大部分人抽到藍色保底,少數人先嚐到綠色新味道。

漸進式上線

金絲雀部署的最大好處,不只是「10% 安全網」,還能漸進調整比例

  • 先跑 90/10 → 觀察監控(metrics、error rate)。
  • 如果健康 → 調成 80/20。
  • 再穩 → 拉到 50/50。
  • 最後 → 全部切到新版本,舊版本下線。

整個過程,就像遊戲活動逐步開放伺服器,先限量測試,再全面開放。

回滾?很簡單

如果新版本出問題,不需要重新部署,也不用緊急打補丁。
只要改設定,把分流比例調回 100% → blue,使用者立刻回到舊版環境。

這種「隨時能退」的安全感,就是金絲雀部署的核心價值。
它讓團隊敢於嘗試新功能,而不用怕「一上線就全服陪葬」。

結論

金絲雀部署,重點不是炫技,而是:

  • 漸進式測水溫:先小規模試,確認沒問題再放大。
  • 隨時可回滾:問題只影響 10%,馬上就能救回來。
  • 降低風險成本:不需要「一刀切」,避免大規模爆炸。

藍綠部署是「兩套環境快速切換」
金絲雀部署則是「流量分批切換」
兩者搭配起來,就像有「存檔點 + 試玩模式」,不只安全,還多了彈性。

自動化部署不是衝最快,而是走得穩。金絲雀部署,就是在高速前進時,留一顆小小的測試氣球,提醒我們何時該剎車。


上一篇
Day.26 不再全軍換血:滾動更新的安全上線術
下一篇
Day.28 爆炸怎麼辦?自動化回滾教你用 Ctrl+Z 救服務
系列文
連DevSecOps都不知道怎麼發音怎麼開始學習?30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言