什麼是部署模式?
部署模式指將新的應用程式功能順暢地推出給使用者的自動化方式。 適當的部署模式可協助您將停機時間減至最少。 部分模式也可讓您逐漸推出新功能。 如此一來,您將這些功能提供給所有人使用之前,即可先使用 [選取使用者] 驗證新功能。
在本節中,您可了解一些常見的部署模式。 您也將了解 Azure App Service 會如何協助實作 Tailspin 小組所選擇的模式。
晨會
Tailspin 小組感覺很有信心。 他們的管線已加速其流程。 小組有一個開發環境,可將 Web 應用程式與資料庫整合。 Tim 和 Amita 都很開心能有可簡化其作業的自動化測試。 一般情況下,他們會看到較少的延遲以及較少的錯誤 (bug)。
但如同往常,還有一個問題。 讓我們造訪一下 Tim 正在說話的小組會議。
Tim:要讓每個人都滿意相當困難。 Irwin 認為發行新功能需要太多時間。 在管理階層核准發行之前,我無法執行任何動作,而且目前沒有任何方式可以在管理階層核准後即順利推出功能。 此流程不只冗長且很混亂。 這是手動流程,而且會有停機時間。 整個進程可能需要五天的時間。 我知道太久了,但是我應該怎麼做? 也許只要我再多喝一點咖啡,我就能想到解決方案。
Andy:若要有效地解決問題,咖啡必不可少。
我認為我們需要的解決方案是有一個好的部署模式。 部署模式是進行切換的自動化方式。 這是我們將軟體從最終的生產前階段移至現場生產的方法。
挑選正確的模式絕對有幫助,例如將停機時間減至最少。 部署模式的另一個優點是,它可讓我們有機會執行在生產中實際發生的測試。
Andy 在白板上開始書寫。
以下是我們應該考慮的可能性:
- 藍綠部署
- Canary 發行
- 功能切換
- 深色啟動
- A/B 測試
- 漸進式部署
讓我們簡短地討論每一個模式。
藍綠部署
藍綠部署可執行兩個相同的環境,以減少風險和停機時間。 這些環境稱為藍色和綠色。 任何時候都只有一個環境保持運作。 藍綠部署通常需要可協助控制流量流程的路由器或負載平衡器。
讓我們假設藍色運作中。 當我們準備新的版本時,我們會在綠色環境中進行最後的測試。 軟體在綠色環境中運作後,只要切換路由器,所有傳入的要求即會進入綠色環境。
藍綠部署也可讓我們快速地進行復原。 如果綠色環境中發生任何錯誤,則我們只需將路由器切換回藍色環境。
Canary 發行
Canary 版本是一種事先找出潛在問題而不讓所有使用者都面臨問題的方法。 其構想是,我們會在將新功能公開給所有人使用之前,先提供給一小部分的使用者。
在 Canary 版本中,我們會監視發行功能時所發生的情況。 如果版本有問題,則會套用修正。 當 Canary 版本已知穩定之後,我們會接著將之移至實際的生產環境。
功能切換
使用「功能切換」可讓我們在執行階段「翻轉切換」。 我們不用向使用者公開任何其他新的或已變更的功能,即可部署新軟體。
在此部署模式中,Mara 和我會在切換後面建置新功能。 發行時,此功能為「關閉」,因此不會影響生產軟體。 依我們設定切換的方式而定,我們可以將切換翻轉為「開啟」,並按照我們想要的方式公開該功能。
例如,我們可以先將功能公開給少數使用者,以了解其反應。 該隨機抽樣的使用者會看到此功能。 或者,我們可以將功能上線供每個人使用。
但是,這種部署模式可能會讓 Mara 和我的獲益比其他人更多。 功能切換模式的一大優勢是,其可協助我們避免過度的分支。 合併分支可能很麻煩。
深色啟動
「深色啟動」類似 Canary 版本或切換功能開關。 我們不會將新功能公開給所有人,而是在深色啟動時,將功能發行給一小部分的使用者。
這些使用者並不知道他們正在為我們測試這項功能。 我們甚至不會對他們醒目提示新的功能。 這就是其稱為深色啟動的原因。 軟體會逐漸或暗中發行給使用者,讓我們可以取得意見反應並可測試效能。
A/B 測試
「A/B 測試」會比較兩個版本的網頁或應用程式,以確定哪一個版本的效能較佳。 A/B 測試就像傳統實驗。
在 A/B 測試中,我們會向使用者隨機顯示兩個或多個頁面的變化。 然後我們會使用統計分析來決定哪個變化執行結果更能達成目標。
漸進式部署
「漸進式部署」有時稱為「環形式部署」。 這是另一種限制變更影響使用者的方式,同時可確保這些變更在生產環境中是有效的。
環形基本上是一種 Canary 階段的延伸模組。 Canary 版本本身會發行至要測量效果的階段。 新增另一個環形基本上是相同的概念。
在以環形為基礎的部署中,我們會首先將變更部署到能夠承受風險的客戶。 然後我們再逐漸推出給更大一組的客戶。
實作藍綠部署
Andy 看著 Tim。
Andy:我知道好多事要做。 您想要花一些時間思考嗎? 或者我們可以......
Tim:藍綠。
房間裡的每個人都笑了。
Mara:這是隨便說說嗎?
Tim:功能切換需要變更您和 Andy 的工作方式。 讓我們一次做一件事。 逐漸公開功能的方法需要統計分析或功能切換。
藍綠部署則是我可以掌控的東西。 切換路由器簡單明瞭。 它很簡單,聽起來又安全。 而且在藍綠部署中,管理人員需要可進行評估的環境。 當其回覆沒問題之後,我們即可輕鬆地切換。 讓我們從這裡開始。
所以問題是,我們要如何在管線中實作藍綠部署呢?
什麼是部署位置?
Andy:由於我們使用的是 Azure App Service,因此我們可以利用「部署位置」。 部署位置是具有專屬主機名稱的執行中應用程式。
我知道我們還沒準備好將 Space Game 網站以自動化管線的一部分部署到生產。 但作為測試,我們可以將部署位置新增至我們的預備環境。
我們不需要設定負載平衡器或路由器,我們只要將第二個位置新增至在現有「預備」環境中使用的 App Service 執行個體即可。 我們可以呼叫主要位置「藍色」和次要位置「綠色」。
如此一來,我們不需要停機即可部署新功能。 我們會在兩個部署位置之間交換應用程式及其設定。 基本上,我們會交換兩個位置的 IP 位址。
Tim:我喜歡這個想法! 您可將這種藍綠部署變化稱為「零停機部署」。
Andy:太棒了! Tim 和我會努力實作此部署模式。 我們可以稍後碰面來查看結果。
功能旗標的用法建議
功能旗標是小組所考慮的其中一個發行步調方法。 小組決定不使用功能旗標,但許多人都發現這些旗標很有用。 本節會提供功能旗標的詳細資訊。
「功能旗標」(有時稱為「功能切換」),可讓您變更系統的運作方式,而無需變更程式碼。 這些旗標可讓您將新的程式碼推送至中央開發分支,並部署程式碼,但不一定能正常運作。 旗標通常會實作為控制條件式邏輯的變數值。
假設您的小組正在銀行應用程式的中央開發分公司中工作。 您決定要在主要分公司中執行所有工作,以避免稍後還需進行混亂的合併作業。 但是您遇到問題。 您將大幅改變利息計算,而人們每天都要依賴該程式碼。 更糟的是,變更須花費數週時間才能完成。 您無法讓主要的程式碼中斷那麼久的時間。
在此案例中,功能旗標可能是不錯的解決方案。 您可以變更程式碼,讓未設定功能旗標的使用者可以繼續使用原始利息計算程式碼。 同時,您的小組已設定功能旗標,因此可以看到他們正在變更的程式碼。
另一種功能旗標是 發行旗標。 想像一下,在您完成利息計算程式碼的工作後,您想要在公開發行之前試用。 您有一群已妥善就位可處理新程式碼和任何可能問題的使用者。 您將會讓他們先試用此功能。 您可以變更設定,讓他們也設定功能旗標,並且可以測試新的程式碼。 如果發生問題,您可以快速停用旗標。