共用方式為


Azure App Service 的可靠性

本文說明 Azure App Service 中的可靠性支援,涵蓋透過 可用性區域多區域部署的區域內部復原能力。

可靠性是您與Microsoft之間共同的責任。 您可以使用本指南來判斷哪些可靠性選項符合您的特定商務目標和運行時間目標。

App Service 是以 HTTP 為基礎的服務,用於裝載 Web 應用程式、REST API 和行動後端。 App Service 與 Microsoft Azure 整合,可為應用程式提供安全性、負載平衡、自動調整和自動化管理。 若要探索 App Service 如何增強應用程式工作負載的可靠性與復原能力,請參閱 App Service 概觀

當您部署 App Service 時,您可以在 App Service 方案中布建多個實例。 這個計劃代表執行您的應用程式代碼的計算工作者。 平臺會努力跨不同的容錯網域部署實例,但不會自動將實例分散到可用性區域。

生產部署建議

  • 使用進階 v3/v4 App Service 方案。

  • 啟用區域備援。 若要了解區域備援的需求以及如何啟用,請參閱 可用性區域支援一節

啟用區域備援,這需要您的App Service方案至少使用兩個實例。

暫時性錯誤

暫時性錯誤是元件中的短暫間歇性失敗。 它們經常出現在雲端等分散式環境中,而且是作業的一般部分。 暫時性錯誤會在短時間內自行修正。 請務必確保您的應用程式能夠處理暫時性錯誤,通常是透過重新嘗試受影響的請求來達成。

所有雲端裝載的應用程式在與任何雲端裝載的 API、資料庫和其他元件通訊時,都應該遵循 Azure 暫時性錯誤處理指引。 如需詳細資訊,請參閱 處理暫時性錯誤的建議

Microsoft提供的 SDK 通常會處理暫時性錯誤。 因為您在 App Service 上裝載自己的應用程式,請考慮如何避免造成暫時性錯誤:

  • 在您的方案中部署多個實例。 App Service 會在方案中的實例上執行自動更新和其他形式的維護。 如果實例變成狀況不良,服務就可以將該實例自動取代為新的狀況良好實例。 在替換過程中,可能會有一小段時間,前一個實例無法使用,而新的實例尚未準備好處理流量。 您可以藉由部署App Service 方案的多個實例來減輕這些影響。

  • 使用部署位置。 App Service 部署位置可讓您 對應用程式進行零停機時間部署。 使用部署插槽,將部署和設定變更對使用者的影響降到最低。 部署位置也會降低應用程式重新啟動的可能性。 重新啟動應用程式會導致暫時性錯誤。

  • 避免擴大或縮小。 擴大和縮小涉及變更配置給每個執行個體的 CPU、記憶體和其他資源。 調整規模擴大和縮小操作可能會觸發應用程式重新啟動。 請選取在一般負載下符合效能需求的階層和實例大小,而不是擴大或縮小規模。 您可以透過動態新增和移除執行個體來處理流量變更,進行擴增和縮減。

可用性區域支援

可用性區域 是每個 Azure 區域內的數據中心實體分隔群組。 當某個區域發生故障時,服務可以切換至其他剩餘的區域。

App Service 可以設定為 區域備援,這表示您的資源會分散到多個可用性區域。 在多個區域分布可協助您的生產工作量達到復原性和可靠性。 當您在 App Service 方案上設定區域備援時,使用方案的所有應用程式都會進行區域備援。

區域備援部署中的實例分佈會遵循特定規則。 當應用程式縮減和擴展時,這些規則仍適用。如需詳細資訊,請參閱 注意事項

區域支援

區域備援 App Service 方案可以部署在任何支援可用性區域的地區

若要查看哪些區域支援 App Service Environment v3 的可用性區域,請參閱 區域

需求

您必須使用 Premium v2-4 方案類型。 若要檢視詳細資訊,請確定您選取此頁面頂端的適當層。

  • 您必須使用 Premium v2-4 或隔離的 v2 方案類型 ,且至少要有兩個方案的實例。

  • 可用性區域僅支援較新的 App Service 縮放單位。 即使您使用其中一個支援的區域,如果您所使用的縮放單位不支援可用性區域,則在建立區域備援 App Service 方案時會收到錯誤。

    您指派的縮放單位是以您部署 App Service 方案的資源群組為基礎。 若要確保您的工作負載落在支援可用性區域的縮放單位上,您可能需要建立新的資源群組,並在新的資源群組內建立新的 App Service 方案和 App Service 應用程式。

    若要查看 App Service 方案是否位於支援可用性區域的戳記上,請檢查 App Service 方案的 maximumNumberOfZones 屬性。 如果值大於一,您的戳記支援區域,而且您可以在方案上啟用區域備援。 如果值等於一個,您的縮放單位不支援可用性區域,而且您需要部署新的計劃來啟用區域備援。

    az appservice plan show -n <app-service-plan-name> -g <resource-group-name> --query properties.maximumNumberOfZones
    
  • 您必須在方案中部署至少兩個實例。

考量

在可用性區域中斷期間,Azure App Service 的某些層面可能會受到影響,即使應用程式繼續提供流量也一樣。 這些行為包括 App Service 方案調整、應用程式建立、應用程式設定和應用程式發佈。

當您在 App Service 方案上啟用區域備援時,也會改善 App Service 平臺推出更新的復原能力。若要深入瞭解,請參閱 服務維護期間的可靠性

區域備援部署中的實例分佈會遵循特定規則。 當應用程式縮減或擴展時,這些規則依然適用。

  • 最小實例: 您的 App Service 方案至少必須有兩個實例,才能進行區域備援。

  • 方案支援的最大可用性區域: Azure 會決定您的方案可以使用的可用性區域數目。 若要檢視方案可使用的可用性區域數目,請參閱 App Service 方案上的 maximumNumberOfZones 屬性。 這是一個唯讀屬性。 如果此值等於 1,您的 App Service 方案不支援區域備援。 如果 maximumNumberOfZones 值大於 1,則可以針對區域備援設定 App Service 方案。

    az appservice plan show -n <app-service-plan-name> -g <resource-group-name> --query properties.maximumNumberOfZones
    
  • 實例散發: 啟用區域備援時,方案實例會自動分散到多個可用性區域。 分配是根據以下規則進行:

    • 如果您指定大於 maximumNumberOfZones 的容量(實例數目),且實例數目會依 maximumNumberOfZones 來分割,則實例平均分配。
    • 任何剩餘的執行個體會分佈到其餘區域。
    • 當 App Service 平台將執行個體配置給區域備援 App Service 方案時,它會使用基礎 Azure 虛擬機器擴展集所提供的最佳區域平衡。 如果每個區域都有相同數目的 VM,或是加一個 VM 或減去所有其他區域的一個 VM,App Service 方案就會達到平衡。 如需詳細資訊,請參閱 區域平衡
  • 實體區域放置: 您可以檢視用於每個 App Service 方案實例的 實體可用性區域 。 使用 REST API,它會傳回 physicalZone 每個實例的值。

    az rest --method get --url https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{appName}/instances?api-version=2024-04-01
    

對於未設定為區域冗餘的 App Service 方案,基礎 VM 實例無法承受可用性區域的失效。 在該區域的任何區域中斷期間,它們可能會發生停機。

成本

當您使用 App Service Premium v2-v4 方案時,只要您的 App Service 方案中有兩個或更多的實例,就不需要為啟用可用性區域支付額外的成本。 系統會根據您的 App Service 方案 SKU、您指定的容量,以及您根據自動調整準則調整的任何執行個體向您收費。

如果您啟用可用性區域,但指定容量小於兩個,則平臺會強制執行兩個實例計數下限。 平台會向您收取這兩個執行個體的費用。

當您使用 App Service 隔離式 v2 方案時,只要 App Service 方案中有兩個以上的執行個體,啟用可用性區域不需要相關聯額外成本。 系統會根據您的 App Service 方案 SKU、您指定的容量,以及您根據自動調整準則調整的任何執行個體向您收費。

如果您啟用可用性區域,但指定容量小於兩個,則平臺會強制執行兩個實例計數下限。 平台會向您收取這兩個執行個體的費用。

設定可用性區域支援

若要部署新的區域備援 App Service 方案,您必須使用 Premium v2-4 方案類型。 若要檢視詳細資訊,請確定您選取此頁面頂端的適當層。

  • 建立具有區域備援的新 App Service 方案。 若要部署新的區域備援 App Service 方案,請在 Azure 入口網站中部署方案或將 App Service 方案屬性zoneRedundant設定為 Azure CLI 命令、Azure PowerShell 命令、Bicep 檔案或 Azure Resource Manager 範本時,選取 [true援] 選項:

    az appservice plan create -g MyResourceGroup -n MyPlan --zone-redundant --number-of-workers 2 --sku P1V3
    

    附註

    如果您使用 Azure CLI 來修改 zone-redundant 屬性,您必須指定 --number-of-workers 屬性,也就是實例數目,並使用大於或等於 2 的容量。

  • 將現有的 App Service 方案移轉至區域備援。 如果您有支持區域備援的現有 App Service 方案(可用區域上限大於 1),您可以將 App Service 方案的 zoneRedundant 屬性 true 設定為 Azure CLI、Bicep 檔案或 Resource Manager 範本,以啟用區域備援:

    az appservice plan update -g <resource group name> -n <app service plan name> --set zoneRedundant=true sku.capacity=2
    

    附註

    如果您使用 Azure CLI 來修改 zoneRedundant 屬性,您必須指定 sku.capacity 屬性,也就是實例數目,並使用大於或等於 2 的容量。

    如果您正在使用不支援可用性區域的方案或戳記,您必須先在新的資源群組中建立新的 App Service 方案,以便登陸在支援區域的 App Service 磁碟使用量上。

    附註

    變更 App Service 計畫的區域備援狀態幾乎是立即生效的。 您不會在過程中遇到停機或效能問題。

  • 停用區域備援。 若要停用區域備援,請將App Service 方案 zoneRedundant 屬性設定為 false 或使用 Azure CLI:

    az appservice plan update -g <resource group name> -n <app service plan name> --set zoneRedundant=false sku.capacity=1
    

    附註

    如果您使用 Azure CLI 來停用 zoneRedundant 屬性,則應該指定 sku.capacity 屬性,否則值會預設值為 1。

  • 建立具有區域備援的新 App Service 方案。

    1. 如果您沒有預先存在的區域備援 App Service 環境,請部署新的區域備援 App Service 環境。 如需如何建立App Service環境的詳細資訊,請參閱 建立App Service環境

    2. 若要在 Azure 入口網站中建立 App Service 方案,請選取 [ 區域備援]。 若要使用 Azure CLI 命令、Azure PowerShell 命令、Bicep 檔案或 Resource Manager 範本建立方案,請將 App Service 方案 zoneRedundant 屬性設定為 true,如下列範例程式代碼所示:

    az appservice plan create -g MyResourceGroup -n MyPlan --app-service-environment MyAse --zone-redundant --number-of-workers 2 --sku I1V2
    

    附註

    如果您使用 Azure CLI 來修改 zoneRedundant 屬性,您必須指定 number-of-workers 屬性,也就是實例數目,並使用大於或等於 2 的容量。

  • 將現有的App Service 方案遷移至區域備援 如果您有支援區域備援的現有 App Service 環境或隔離 v2 App Service 方案,您可以隨時啟用區域備援。 若要啟用 App Service 環境的區域備援,請將 屬性設定 zoneRedundanttrue 或使用 Azure CLI:

    az resource update --ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/hostingEnvironments/{aseName} --set properties.zoneRedundant=true
    

    附註

    當您變更 App Service 環境的區域備援狀態時,會起始需要 12-24 小時才能完成的升級。 在升級程式期間,您不會遇到任何停機時間或效能問題。

    針對隔離式 v2 App Service 方案,如果 App Service 環境具有區域備援功能,則可以將 App Service 方案設定為區域備援。 每個 App Service 方案都有自己的獨立區域備援設定,這表示您可以在 App Service 環境中混合使用區域備援和非區域備援方案。 若要在隔離 v2 App Service 方案上啟用區域備援,請將 App Service 方案的 zoneRedundant 屬性設定為 true 或使用 Azure CLI。

    az appservice plan update -g <resource group name> -n <app service plan name> --set zoneRedundant=true sku.capacity=2
    

    附註

    如果您使用 Azure CLI 來修改 zoneRedundant 屬性,您必須指定 sku.capacity 屬性,也就是實例數目,並使用大於或等於 2 的容量。

  • 停用區域備援。 若要停用區域備援,您可以將App Service方案或App Service Environment zoneRedundant 屬性設定為 false 或使用 Azure CLI:

    az resource update --ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/hostingEnvironments/{aseName} --set properties.zoneRedundant=false
    
    az appservice plan update -g <resource group name> -n <app service plan name> --set zoneRedundant=false sku.capacity=1
    

    附註

    如果您使用 Azure CLI 來停用 zoneRedundant 屬性,則應該指定 sku.capacity 屬性,否則值會預設值為 1。

容量規劃和管理

若要為可用性區域失敗做好準備,請考慮「過度佈建」App Service 方案的容量。 過度布建可讓解決方案容許某種程度的容量遺失,並繼續運作,而不會降低效能。 如需詳細資訊,請參閱 使用過度布建來管理容量

正常作業

以下部分說明當 App Service 方案設定為區域備援架構,且所有可用性區域皆正常運作時所能期待的情況:

  • 區域之間的流量路由: 在正常作業期間,流量會在所有可用性區域的所有可用 App Service 方案實例之間路由傳送。

  • 區域之間的數據復寫: 在一般作業期間,應用程式檔案系統中儲存的任何狀態都會儲存在區域備援記憶體中,並在可用性區域之間同步復寫。

區域關閉體驗

在可用性區域中斷期間,Azure App Service 的某些層面可能會受到影響,即使應用程式繼續提供流量也一樣。 這些行為包括 App Service 方案調整、應用程式建立、應用程式設定和應用程式發佈。

下一節說明當 App Service 方案設定為區域備援,且一或多個可用性區域無法使用時,會發生什麼情況:

  • 偵測和回應: App Service 平臺會自動偵測可用性區域中的失敗,並起始回應。 不需要手動介入即可起始區域容錯移轉。

  • 作用中要求: 當可用區域無法使用時,連接至故障可用區域中 App Service 計畫實例的任何進行中要求都會終止。 他們需要重試。

  • 流量重新路由: 當區域無法使用時,App Service 會從該區域偵測遺失的實例,並自動嘗試尋找新的取代實例。 找到替代實例後,它會視情況將流量分散到新的實例。

    如果已設定自動調整規模功能,並判斷需要更多執行個體,它會向 App Service 發出請求以新增這些執行個體。 自動調整行為與 App Service 平台行為無關,意思是您的執行個體計數規格不需要是二的倍數。 如需詳細資訊,請參閱在 App Service 中擴展應用程式自動調整概觀

    重要

    在區域關閉的案例中,要求更多執行個體不一定會成功。 遺失執行個體的回填會以最佳方式進行。 如果您需要在可用性區域遺失時保證容量,您應該建立並設定 App Service 方案以考慮區域遺失的情況。 您可以透過 增加 App Service 計劃的容量來達成此目的。

  • 非運行時行為: 部署在區域備援 App Service 方案中的應用程式,即使可用性區域發生中斷,也會繼續運行並提供流量服務。 不過,在可用性區域中斷期間,非執行階段行為仍會受到影響。 這些行為包括 App Service 方案調整、應用程式建立、應用程式設定和應用程式發佈。

容錯回復

當可用性區域復原時,App Service 會自動在復原的可用性區域中建立實例、移除在其他可用性區域中建立的任何暫存實例,以及如往常路由傳送實例之間的流量。

測試區域失敗

App Service 平台會管理區域備援 App Service 方案的流量路由、容錯移轉和容錯回復。 由於此功能完全受控,因此您不需要起始或驗證可用性區域失敗程式。

多區域支援

App Service 是單一區域服務。 如果區域變成無法使用,您的應用程式也無法使用。

替代的多區域方法

若要降低影響應用程式的單一區域失敗風險,請跨多個區域部署。 下列步驟有助於加強復原能力:

  • 將您的應用程式部署到每個區域中的實例。
  • 設定負載平衡和故障轉移原則。
  • 跨區域複寫您的數據,以便復原最後一個應用程式狀態。

如需說明此架構的範例方法,請參閱 使用App Service環境進行高可用性企業部署

備份

當您使用基本層或更新版本時,可以使用App Service備份和還原功能,將App Service 應用程式備份至檔案。

如果很難重新部署程式代碼,或將狀態儲存在磁碟上,這項功能就很有用。 針對大部分的解決方案,您不應該只依賴備份。 請改用本指南中所述的其他功能來支持復原需求。 不過,備份可防範其他方法未發生的一些風險。 如需詳細資訊,請參閱 在App Service 中備份和還原您的應用程式

服務維護期間的可靠性

Azure App Service 會執行一般服務升級,以及其他形式的維護。 為了確保您的預期容量可在升級期間使用,平臺會在升級程式期間自動新增App Service 方案的額外實例。

啟用區域備援。 當您在 App Service 方案上啟用區域備援時,您就提升了對 App Service 平臺推出的更新的復原韌性。更新域 是指在更新時被離線的虛擬機器的集合。 更新網域會繫結至可用性區域。 在 App Service 方案中部署多個實例,並在實例或區域變成狀況不良時,為方案啟用區域備援,會在升級期間新增額外的復原層。

若要深入瞭解,請參閱 Azure App Service 的例行計劃性維護

自定義升級週期。 您可以自定義 App Service 環境的升級週期。 如果您需要驗證升級對工作負載的影響,請考慮啟用手動升級,以便在變更推出至生產實例之前,先對非生產實例執行驗證和測試。

若要深入瞭解維護喜好設定,請參閱 App Service Environment 計劃性維護的升級喜好設定

服務等級協定 (SLA)

App Service 的服務等級協定 (SLA) 描述服務的預期可用性,以及必須符合才能達到該可用性預期的條件。 如需詳細資訊,請參閱 在線服務的 SLA

當您部署區域備援 App Service 方案時,SLA 中定義的運行時間百分比會增加。