你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 应用服务的可靠性
本文介绍了 Azure 应用服务中的可靠性支持,并涵盖了通过可用性区域实现的区域内复原能力。 有关 Azure 中可靠性的更详细概述,请参阅 Azure 可靠性。
Azure 应用服务是基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端;并将 Microsoft Azure 的强大功能添加到应用程序,例如:
- 安全性
- 负载均衡
- 自动缩放
- 自动化管理
要了解 Azure 应用服务如何提升应用程序工作负载的复原能力,请参阅为什么使用 Azure 应用服务?
可靠性建议
本部分包含针对实现复原能力和可用性的建议。 每个建议可归入以下两个类别之一:
运行状况项涵盖配置项目和构成 Azure 工作负载的主要组件的正确功能等方面,例如 Azure 资源配置设置、对其他服务的依赖项等。
风险项涵盖可用性和恢复要求、测试、监视、部署和其他项目(如果未解决,则会增加环境中出现问题的可能性)等方面。
可靠性建议优先级矩阵
每项建议都根据以下优先级矩阵进行标记:
映像 | 优先级 | 说明 |
---|---|---|
高 | 需要立即修复。 | |
中 | 在 3-6 个月内修复。 | |
低 | 需要审查。 |
可靠性建议摘要
类别 | 优先级 | 建议 |
---|---|---|
高可用性 | ASP-1 - 部署区域冗余应用服务计划 | |
复原 | ASP-2 - 使用支持可用性区域的应用服务计划 | |
ASP-4 - 为生产和测试创建单独的应用服务计划 | ||
可伸缩性 | ASP-3 - 避免频繁纵向扩展或缩减 | |
ASP-5 - 启用“自动缩放/自动扩展”,以确保有足够的资源可用于服务请求 |
高可用性
ASP-1 - 部署区域冗余应用服务计划
若要增强业务关键型工作负载的复原能力和可靠性,建议使用区域冗余部署新的应用服务计划。 按照步骤 重新部署到可用性区域支持,配置管道以在新的应用服务计划中重新部署 Web 应用,然后使用蓝绿部署方法故障转移到新站点。
通过将应用程序分布到多个可用性区域,可以确保即使在数据中心级发生故障时,应用程序也能继续运行。 有关 Azure 应用服务中可用性区域支持的详细信息,请参阅可用性区域支持。
// Azure Resource Graph Query
// The query filters the qualified App Service Plans that do not have Zone Redundancy enabled.
resources
| where type =~ 'microsoft.web/serverfarms'
| extend zoneRedundant = tobool(properties.zoneRedundant)
| extend sku_tier = tostring(sku.tier)
| where sku_tier !in ("Free", "LinuxFree", "Basic", "WorkflowStandard", "ElasticPremium", "Dynamic", "Shared", "", "Isolated", "Standard") and zoneRedundant == false
| project name, subscriptionId, sku_tier, zoneRedundant
复原
ASP-2 - 使用支持可用性区域的应用服务计划
可用性区域支持仅适用于某些应用服务计划。 若要查看使用可用性区域所需的计划,请参阅可用性区域先决条件。
// Azure Resource Graph Query
// The query filters the resources based on the type "microsoft.web/serverfarms" i.e. App Service Plans that are not setup to use standard or premium SKUs.
resources
| where type =~ 'microsoft.web/serverfarms'
| extend sku_tier = tostring(sku.tier)
| where sku_tier !contains 'premium' and sku_tier !contains 'standard'
| project name, sku_tier
ASP-4 - 为生产和测试创建单独的应用服务计划
若要增强业务关键型工作负载的复原能力和可靠性,应将现有的应用服务计划和应用服务环境迁移到可用性区域支持。 通过将应用程序分布到多个可用性区域,可以确保即使在数据中心级发生故障时,应用程序也能继续运行。 有关 Azure 应用服务中可用性区域支持的详细信息,请参阅可用性区域支持。
可伸缩性
ASP-3 - 避免频繁纵向扩展或缩减
建议避免频繁纵向扩展或缩减 Azure 应用服务实例。 相反,请选择可以处理典型工作负载的适当层和实例大小,并横向扩展实例以适应流量的变化。 纵向扩展或缩减可能会触发应用程序重启,这可能会导致服务中断。
ASP-5 - 启用“自动缩放/自动扩展”,以确保有足够的资源可用于服务请求
建议为 Azure 应用服务启用自动缩放/自动扩展,以确保有足够的资源来处理传入的请求。 自动缩放是基于规则的缩放,而自动扩展根据 HTTP 流量执行自动传入和横向扩展。 有关详细信息,请参阅 Azure 应用服务中的自动扩展或在 Azure 中开始使用自动缩放。
// Azure Resource Graph Query
// The query filters the resources based on the type "microsoft.web/serverfarms" i.e. App Service Plans that are not setup to use standard or premium SKUs.
// TODO: Extend this query to show automatic scaling or App level automatic scale
resources
| where type =~ "microsoft.insights/autoscalesettings"
| where properties.targetResourceUri contains "microsoft.web/serverfarms"
| project AppServicePlan = split(properties.targetResourceUri, '/')[8], ResourceGroup = split(properties.targetResourceUri, '/')[4]
| project AppServicePlan, ResourceGroup
可用性区域支持
Azure 可用性区域是每个 Azure 地区内的至少三个在物理上独立的数据中心组。 每个区域中的数据中心都配备了独立的电源、冷却系统和网络基础结构。 在本地区域发生故障的情况下,设计可用性区域,以便一个区域受到影响时,其余两个区域支持区域服务、容量和高可用性。
故障范围包括软件和硬件故障,以及地震、洪水和火灾等事件。 容错是通过 Azure 服务的冗余和逻辑隔离来实现的。 有关 Azure 中可用性区域的详细信息,请参阅地区和可用性区域。
已启用 Azure 可用性区域的服务旨在提供适当级别的可靠性和灵活性。 可以通过两种方式进行相关配置。 可以采用区域冗余配置,实现跨区域自动复制,也可以采用区域性配置,将实例固定到特定区域。 还可以将这些方法结合。 有关区域与区域冗余体系结构的详细信息,请参阅使用可用性区域构建解决方案。
可以跨可用性区域 (AZ) 部署 Azure 应用服务,以帮助实现业务关键型工作负载的复原能力和可靠性。 此体系结构也称为区域冗余。
在配置为区域冗余时,平台会自动将 Azure 应用服务的实例分散到所选地区中的三个区域。 这意味着最小应用服务计划实例计数将始终为三个。 如果指定容量大于 3,并且实例数可被 3 整除,则这些实例会均匀分布。 否则,超过 3*N 的实例计数会分布在剩余的一两个区域中。
可用性区域支持是应用服务计划的一个属性。 可以使用应用服务环境在托管的多租户环境或专用环境中创建应用服务计划。 要了解有关应用服务环境的详细信息,请参阅应用服务环境 v3 概述。
对于未配置为区域冗余的应用服务,VM 实例无法复原区域,并且可能会在该地区的任何区域发生中断时出现故障时间。
有关企业部署体系结构的信息,请参阅使用应用服务环境进行高可用性企业部署。
先决条件
下面是目前在启用可用性区域时的要求/限制:
同时支持 Windows 和 Linux。
应用服务计划必须是支持可用性区域的以下计划之一:
- 在使用应用服务高级版 v2 或高级版 v3 计划的多租户环境中。
- 在使用应用服务环境 v3 的专用环境中,它与独立 v2 应用服务计划一起使用。
对于专用环境,应用服务环境必须为 v3。
重要
应用服务环境 v2 和 v1 将于 2024 年 8 月 31 日停用。 应用服务环境 v3 更易于使用,并且运行在功能更强大的基础结构上。 要详细了解应用服务环境 v3,请参阅应用服务环境概述。 如果当前正在使用应用服务环境 v2 或 v1,并且希望升级到 v3,请按照本文中的步骤迁移到新版本。
强制实施三个区域的最小实例计数。 如果指定的实例计数小于 3,平台将在后台强制执行此最小计数。
只能在创建新的应用服务计划时指定可用性区域。 无法将现有的应用服务计划转换为使用可用性区域。
以下区域支持在多租户环境中运行的 Azure 应用服务:
- 澳大利亚东部
- 巴西南部
- 加拿大中部
- 印度中部
- 美国中部
- 东亚
- 美国东部
- 美国东部 2
- 法国中部
- 德国中西部
- 日本东部
- 韩国中部
- 北欧
- 挪威东部
- 波兰中部
- 卡塔尔中部
- 南非北部
- 美国中南部
- 东南亚
- 瑞典中部
- 瑞士北部
- 阿拉伯联合酋长国北部
- 英国南部
- 西欧
- 美国西部 2
- 美国西部 3
- 由世纪互联运营的 Microsoft Azure - 中国北部 3
- Azure 政府 - US Gov 弗吉尼亚州
若要查看哪些区域支持适用于应用服务环境 v3 的可用性区域,请查看区域。
创建启用可用性区域的资源
部署多租户区域冗余应用服务
若要使用 Azure CLI 启用可用性区域,请在创建应用服务计划时包含 --zone-redundant
参数。 还可以包含 --number-of-workers
参数以指定容量。 如果未指定容量,则平台默认为 3。 容量应基于工作负荷要求进行设置,但不得少于 3。 选择容量时,一个好的做法是确保应用程序有足够的实例,这样即使失去某个实例区域,也剩有足够的容量来处理预期负载。
az appservice plan create --resource-group MyResourceGroup --name MyPlan --sku P1v2 --zone-redundant --number-of-workers 6
提示
若要确定实例容量,可使用以下计算:
由于平台将 VM 分散到三个区域,并且你至少需要考虑一个区域的故障,因此将峰值工作负载实例计数乘以“区域/(区域-1)”或 3/2。 例如,如果你的典型峰值工作负载需要四个实例,则应预配六个实例:(2/3 * 6 个实例)= 4 个实例。
使用专用环境部署区域冗余应用服务
若要了解如何在独立 v2 计划上创建应用服务环境 v3,请查看创建应用服务环境。
容错
要为可用性区域失败做好准备,应过度预配服务容量,以确保解决方案可以容忍 1/3 的容量损失,并在区域范围的中断期间继续正常运行,而不会降低性能。 由于平台将 VM 分散到三个区域,并且你至少需要考虑一个区域的故障,因此将峰值工作负载实例计数乘以“区域/(区域-1)”或 3/2。 例如,如果你的典型峰值工作负载需要四个实例,则应预配六个实例:(2/3 * 6 个实例)= 4 个实例。
区域故障体验
流量将路由到所有可用的应用服务实例。 在区域关闭时,应用服务平台将检测丢失的实例并自动尝试查找新的替换实例并根据需要分散流量。 如果配置了自动缩放,并且如果确定需要更多实例,则自动缩放还会向应用服务发出请求以添加更多实例。 请注意,自动缩放行为与应用服务平台行为无关,并且自动缩放实例计数规范不需要是三的倍数。
注意
对区域缩减方案中其他实例的请求不一定会成功。 系统会尽最大努力对丢失的实例进行回填。 建议的解决方法是如下一部分所述,创建并配置应用服务计划来解决丢失区域的问题。
即使同一 Azure 区域中的其他局部区域发生服务中断,在启用了可用性区域的应用服务计划中部署的应用程序也仍可正常运行并为流量提供服务。 但是,非运行时行为(包括应用服务计划缩放、应用程序创建、应用程序配置和应用程序发布)可能仍然会受其他可用性区域中的中断的影响。 应用服务计划的区域冗余仅确保已部署应用程序的持续正常运行时间。
应用服务平台将实例分配给区域冗余应用服务计划时,它使用由基础 Azure 虚拟机规模集提供的最大程度区域均衡。 如果每个区域具有相同数量的 VM,或者与在应用服务计划使用的所有其他区域中的 VM 数相差 1,则应用服务计划“已实现均衡”。
可用性区域迁移
无法将现有应用服务实例或环境资源从非可用性区域支持迁移到可用性区域支持。 要获取对可用性区域的支持,需要创建启用了可用性区域的资源。
定价
启用可用性区域不会产生额外的成本。 区域冗余应用服务的定价与单区域应用服务相同。 将根据应用服务计划 SKU、指定的容量以及根据自动缩放条件扩展到的任何实例向你收费。 如果启用可用性区域但指定的容量小于 3,则平台将强制执行最小实例计数 3,并针对这三个实例向你收费。 有关应用服务环境 v3 的定价信息,请查看定价。