什麼是部署模式?

已完成

部署模式指將新的應用程式功能順暢地推出給使用者的自動化方式。 適當的部署模式可協助您將停機時間減至最少。 部分模式也可讓您逐漸推出新功能。 如此一來,您將這些功能提供給所有人使用之前,即可先使用 [選取使用者] 驗證新功能。

在本節中,您可了解一些常見的部署模式。 您也將了解 Azure App Service 會如何協助實作 Tailspin 小組所選擇的模式。

晨會

Tailspin 小組感覺很有信心。 他們的管線已加速其流程。 小組有一個開發環境,可將 Web 應用程式與資料庫整合。 Tim 和 Amita 都很開心能有可簡化其作業的自動化測試。 一般情況下,他們會看到較少的延遲以及較少的錯誤 (bug)。

但如同往常,還有一個問題。 讓我們造訪一下 Tim 正在說話的小組會議。

Tim:要讓每個人都滿意相當困難。 Irwin 認為發行新功能需要太多時間。 在管理階層核准發行之前,我無法執行任何動作,而且目前沒有任何方式可以在管理階層核准後即順利推出功能。 此流程不只冗長且很混亂。 這是手動流程,而且會有停機時間。 整個進程可能需要五天的時間。 我知道太久了,但是我應該怎麼做? 也許只要我再多喝一點咖啡,我就能想到解決方案。

Andy:若要有效地解決問題,咖啡必不可少。

我認為我們需要的解決方案是有一個好的部署模式。 部署模式是進行切換的自動化方式。 這是我們將軟體從最終的生產前階段移至現場生產的方法。

挑選正確的模式絕對有幫助,例如將停機時間減至最少。 部署模式的另一個優點是,它可讓我們有機會執行在生產中實際發生的測試。

Andy 在白板上開始書寫。

以下是我們應該考慮的可能性:

  • 藍綠部署
  • Canary 發行
  • 功能切換
  • 深色啟動
  • A/B 測試
  • 漸進式部署

讓我們簡短地討論每一個模式。

藍綠部署

藍綠部署可執行兩個相同的環境,以減少風險和停機時間。 這些環境稱為藍色綠色。 任何時候都只有一個環境保持運作。 藍綠部署通常需要可協助控制流量流程的路由器或負載平衡器。

Diagram of a load balancer distributing traffic in a blue-green deployment.

讓我們假設藍色運作中。 當我們準備新的版本時,我們會在綠色環境中進行最後的測試。 軟體在綠色環境中運作後,只要切換路由器,所有傳入的要求即會進入綠色環境。

藍綠部署也可讓我們快速地進行復原。 如果綠色環境中發生任何錯誤,則我們只需將路由器切換回藍色環境。

Canary 發行

Canary 版本是一種事先找出潛在問題而不讓所有使用者都面臨問題的方法。 其構想是,我們會在將新功能公開給所有人使用之前,先提供給一小部分的使用者。

Diagram of a load balancer sending traffic to a canary version.

在 Canary 版本中,我們會監視發行功能時所發生的情況。 如果版本有問題,則會套用修正。 當 Canary 版本已知穩定之後,我們會接著將之移至實際的生產環境。

功能切換

使用「功能切換」可讓我們在執行階段「翻轉切換」。 我們不用向使用者公開任何其他新的或已變更的功能,即可部署新軟體。

在此部署模式中,Mara 和我會在切換後面建置新功能。 發行時,此功能為「關閉」,因此不會影響生產軟體。 依我們設定切換的方式而定,我們可以將切換翻轉為「開啟」,並按照我們想要的方式公開該功能。

Diagram of a coded if statement for an on-off feature.

例如,我們可以先將功能公開給少數使用者,以了解其反應。 該隨機抽樣的使用者會看到此功能。 或者,我們可以將功能上線供每個人使用。

但是,這種部署模式可能會讓 Mara 和我的獲益比其他人更多。 功能切換模式的一大優勢是,其可協助我們避免過度的分支。 合併分支可能很麻煩。

深色啟動

「深色啟動」類似 Canary 版本或切換功能開關。 我們不會將新功能公開給所有人,而是在深色啟動時,將功能發行給一小部分的使用者。

Diagram of a load balancer sending traffic to the new feature.

這些使用者並不知道他們正在為我們測試這項功能。 我們甚至不會對他們醒目提示新的功能。 這就是其稱為深色啟動的原因。 軟體會逐漸或暗中發行給使用者,讓我們可以取得意見反應並可測試效能。

A/B 測試

「A/B 測試」會比較兩個版本的網頁或應用程式,以確定哪一個版本的效能較佳。 A/B 測試就像傳統實驗。

Diagram of two apps and their analytics.

在 A/B 測試中,我們會向使用者隨機顯示兩個或多個頁面的變化。 然後我們會使用統計分析來決定哪個變化執行結果更能達成目標。

漸進式部署

「漸進式部署」有時稱為「環形式部署」。 這是另一種限制變更影響使用者的方式,同時可確保這些變更在生產環境中是有效的。

環形基本上是一種 Canary 階段的延伸模組。 Canary 版本本身會發行至要測量效果的階段。 新增另一個環形基本上是相同的概念。

Diagram of a progression of larger groups.

在以環形為基礎的部署中,我們會首先將變更部署到能夠承受風險的客戶。 然後我們再逐漸推出給更大一組的客戶。

實作藍綠部署

Andy 看著 Tim。

Andy:我知道好多事要做。 您想要花一些時間思考嗎? 或者我們可以......

Tim:藍綠。

房間裡的每個人都笑了。

Mara:這是隨便說說嗎?

Tim:功能切換需要變更您和 Andy 的工作方式。 讓我們一次做一件事。 逐漸公開功能的方法需要統計分析或功能切換。

藍綠部署則是我可以掌控的東西。 切換路由器簡單明瞭。 它很簡單,聽起來又安全。 而且在藍綠部署中,管理人員需要可進行評估的環境。 當其回覆沒問題之後,我們即可輕鬆地切換。 讓我們從這裡開始。

所以問題是,我們要如何在管線中實作藍綠部署呢?

什麼是部署位置?

Andy:由於我們使用的是 Azure App Service,因此我們可以利用「部署位置」。 部署位置是具有專屬主機名稱的執行中應用程式。

我知道我們還沒準備好將 Space Game 網站以自動化管線的一部分部署到生產。 但作為測試,我們可以將部署位置新增至我們的預備環境。

我們不需要設定負載平衡器或路由器,我們只要將第二個位置新增至在現有「預備」環境中使用的 App Service 執行個體即可。 我們可以呼叫主要位置「藍色」和次要位置「綠色」

Diagram of applications swapping IP addresses.

如此一來,我們不需要停機即可部署新功能。 我們會在兩個部署位置之間交換應用程式及其設定。 基本上,我們會交換兩個位置的 IP 位址。

Tim:我喜歡這個想法! 您可將這種藍綠部署變化稱為「零停機部署」

Andy:太棒了! Tim 和我會努力實作此部署模式。 我們可以稍後碰面來查看結果。

功能旗標的用法建議

功能旗標是小組所考慮的其中一個發行步調方法。 小組決定不使用功能旗標,但許多人都發現這些旗標很有用。 本節會提供功能旗標的詳細資訊。

「功能旗標」(有時稱為「功能切換」),可讓您變更系統的運作方式,而無需變更程式碼。 這些旗標可讓您將新的程式碼推送至中央開發分支,並部署程式碼,但不一定能正常運作。 旗標通常會實作為控制條件式邏輯的變數值。

假設您的小組正在銀行應用程式的中央開發分公司中工作。 您決定要在主要分公司中執行所有工作,以避免稍後還需進行混亂的合併作業。 但是您遇到問題。 您將大幅改變利息計算,而人們每天都要依賴該程式碼。 更糟的是,變更須花費數週時間才能完成。 您無法讓主要的程式碼中斷那麼久的時間。

在此案例中,功能旗標可能是不錯的解決方案。 您可以變更程式碼,讓未設定功能旗標的使用者可以繼續使用原始利息計算程式碼。 同時,您的小組已設定功能旗標,因此可以看到他們正在變更的程式碼。

另一種功能旗標是 發行旗標。 想像一下,在您完成利息計算程式碼的工作後,您想要在公開發行之前試用。 您有一群已妥善就位可處理新程式碼和任何可能問題的使用者。 您將會讓他們先試用此功能。 您可以變更設定,讓他們也設定功能旗標,並且可以測試新的程式碼。 如果發生問題,您可以快速停用旗標。

檢定您的知識

1.

行銷小組已要求您將橫幅新增至公司的網站。 他們有兩種版本的橫幅。 他們想要知道哪個版本會產生更多點選連結。 您可以使用哪種部署模式來協助行銷小組找出更佳版本?

2.

您的網站有新的功能,且您已準備好進行部署。 不過,這項功能有風險,因為它會變更使用者與網站互動的方式。 您可以使用哪一種部署模式來發行至已註冊可查看新功能的一小群早期採用者?

3.

您不確定您的使用者對您的新功能有何反應。 您想要將您的功能發行至隨機抽樣的少量使用者,以了解其反應如何。 您可以使用哪種部署模式?