簡體   English   中英

部署 Azure Web 應用程序時最小化停機時間的最佳實踐

[英]Best practice for minimizing downtime when deploying Azure Web Apps

我有一個應用服務計划,在這個計划中,我將解決方案的 5 個組件部署為 Web 應用程序。 我在 Azure DevOps 中使用“發布管理”將代碼部署到這些應用程序。

為了最大限度地減少部署期間的停機時間,我先部署到暫存槽,然后將暫存槽換成生產槽以完成部署。

我已配置應用服務預熱(詳見此處)以調用一個端點,該端點將在插槽交換過程中“預熱”應用程序。

這似乎有效,但我有兩個問題:

  1. 即使預熱已經運行,在插槽交換后向應用程序發出的第一個請求也需要很長時間。 我懷疑這是由於生產插槽具有“粘性/插槽設置”,據我所知,這需要重新啟動應用程序。 為了測試這一點,我刪除了插槽設置,但延遲仍然存在。

  2. 應用程序相互依賴,並且插槽交換(即使在 Azure DevOps 中並行啟動)不能保證同時完成,這意味着新代碼可能與舊代碼交互。 雖然我們可以圍繞這個進行設計,但這並不是最優的。

從我目前的調查來看,我能想到的解決這些問題的唯一方法是啟動第二個應用服務計划,並將流量管理器配置為位於這兩個服務計划的前面。 部署時,我會優先考慮其中一個服務計划,同時部署到另一個服務計划,一旦完成,將流量轉移到新部署的服務計划,同時升級另一個服務計划,然后在兩者都完成后再次平衡兩者之間的流量在相同的代碼級別。

在 Azure 中使用 WebApps 時,當前零停機部署的“最佳實踐”是什么?

使用流量管理器的重復服務計划是一個可行的選擇嗎?如果不是,您有什么建議?

遵循這些更多的最佳實踐建議。

根據狀態碼交換

在交換操作期間,暫存槽中的站點通過向其根目錄發出 HTTP 請求來預熱。 有關該過程的更詳細說明,請參閱如何在部署插槽交換期間預熱 Azure Web 應用程序

默認情況下,只要站點以任何狀態代碼響應,交換就會繼續進行。 但是,如果您希望在應用程序無法預熱時不繼續進行交換,則可以使用以下應用程序設置對其進行配置:

  • WEBSITE_SWAP_WARMUP_PING_PATH:發出預熱請求的路徑。 將此設置為以斜杠作為值開頭的 URL 路徑。 例如,“/warmup.php”。 默認值為 /。

  • WEBSITE_SWAP_WARMUP_PING_STATUSES:預熱操作的預期 HTTP 響應代碼。 將此設置為以逗號分隔的 HTTP 狀態代碼列表。 例如:“200,202”。 如果返回的狀態碼不在列表中,則交換操作不會完成。 默認情況下,所有響應代碼都有效。

盡量減少隨機冷啟動

  • WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG:將此設置為“1”將阻止 web 應用程序的工作進程和應用程序域在應用程序服務的存儲基礎架構重新配置時回收。

https://ruslany.net/2019/06/azure-app-service-deployment-slots-tips-and-tricks/#prevent-cold-start

控制槽粘性配置

但是,如果出於任何原因您需要恢復到交換這些設置的舊行為,則可以將應用程序設置 WEBSITE_OVERRIDE_PRESERVE_DEFAULT_STICKY_SLOT_SETTINGS 添加到應用程序的每個插槽並將其值設置為“0”或“false”。

https://ruslany.net/2019/06/azure-app-service-deployment-slots-tips-and-tricks/#slot-sticky-config

我建議將本地緩存部署槽結合使用,以防止任何停機。

將值為 Always 的粘性應用設置WEBSITE_LOCAL_CACHE_OPTION添加到您的Production slot 如果您使用的是WEBSITE_LOCAL_CACHE_SIZEINMB ,請將其作為粘性設置添加到您的Production slot

• 創建一個暫存槽並發布到您的暫存槽。 如果您獲得生產槽的本地緩存的好處,您通常不會將暫存槽設置為使用本地緩存來為暫存啟用無縫的構建-部署-測試生命周期。

• 根據您的暫存槽測試您的站點。

• 准備好后,在暫存槽和生產槽之間發出交換操作

• 粘性設置包括名稱和對插槽的粘性。 因此,當Staging 插槽被交換到Production時,它會繼承 Local Cache 應用程序設置 新交換的生產槽將在幾分鍾后針對本地緩存運行,並將作為交換后槽預熱的一部分進行預熱。 因此,當插槽交換完成時,您的生產插槽將針對本地緩存運行

請參閱 Azure 最佳實踐文檔:

https://docs.microsoft.com/en-us/azure/app-service/deploy-best-practices

https://docs.microsoft.com/en-us/azure/app-service/overview-local-cache

在加熱站點之前,我使用了“預覽交換”功能。

交換槽的主要問題是交換時工作進程會重新啟動。 這意味着需要重新加熱這些站點。

當您將 Swap 與 Preview 一起使用時,工作進程會重新啟動,但交換不會完成,這意味着您可以相應地預熱站點。 一旦您對測試和性能感到滿意,您只需“完成交換”,站點就會做出相同的響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM