Azure 应用服务 是一种基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端。 应用服务与 Azure 集成,为应用程序提供安全性、负载均衡、自动缩放和自动化管理。 作为 Azure 服务,应用服务提供了一系列功能来支持可靠性要求。
使用 Azure 时, 可靠性是共同的责任。 Azure 提供了一系列支持复原和恢复的功能。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。
本文介绍如何使应用服务能够复原各种潜在的中断和问题,包括暂时性故障、可用性区域中断、区域中断和服务维护。 它还介绍了如何使用备份从其他类型的问题中恢复,并重点介绍了有关应用服务级别协议(SLA)的一些关键信息。
注释
如果要查找有关应用服务环境中可靠性支持的信息,请参阅 应用服务环境中的可靠性。
生产部署建议
Azure Well-Architected Framework 提供了关于可靠性、性能、安全性、成本和操作的建议。 若要了解这些领域如何相互影响并有助于可靠的应用服务解决方案,请参阅 Azure Well-Architected Framework 中应用服务(Web 应用)的体系结构最佳做法。
可靠性体系结构概述
创建应用服务 Web 应用时,请指定运行应用的应用服务计划。
应用服务计划定义一组运行 Web 应用的计算资源。 所有 Web 应用都必须在计划内运行。 可以缩放计划以在多个 VM 实例(也称为“工作线程”)上运行。 这些实例提供运行应用代码的计算资源。 单个应用服务计划可以托管多个应用。 所有应用都在同一个共享 VM 实例集上运行。
应用服务提供以下冗余功能:
跨容错域分布:在平台级别,Azure 会自动在 Azure 区域内的容错域之间分配应用服务计划的 VM 实例。 此分发通过将共用同一电源和网络交换机的 VM 归为一组,将本地化硬件故障的风险降到最低。
跨可用性区域分布:如果在受支持的应用服务计划中启用区域冗余,Azure 会在该区域内的可用性区域之间分发实例。 如果发生区域中断,此配置可提供更高的复原能力。 有关区域冗余的详细信息,请参阅可用性区域支持。
应用缩放:将应用服务计划配置为运行多个 VM 实例时,计划中的所有应用默认在所有实例上运行。 如果配置计划进行自动缩放,则所有应用会根据自动缩放设置一起横向扩展。 但是,可以使用每应用缩放来自定义运行特定应用的计划实例数。
缩放单位: 在内部,应用服务在称为 缩放单元(也称为 戳记 或 Web 空间)的平台基础结构上运行。 缩放单元包括托管和运行应用服务所需的所有组件,包括计算、存储、网络和负载均衡。 Azure 管理缩放单元,以确保均衡的工作负荷分发、执行日常维护和维护整体平台可靠性。
某些功能可能仅适用于特定的缩放单元。 例如,某些应用服务缩放单元可能支持区域冗余,而同一区域中的其他缩放单元则不支持。
暂时性故障的复原能力
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。
与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅有关处理暂时性故障的建议。
Microsoft 提供的 SDK 通常处理暂时性故障。 由于在应用服务上托管自己的应用程序,因此请采取措施减少暂时性故障的可能性:
在计划中部署多个实例。 应用服务对计划中的实例执行自动更新和其他形式的维护。 如果某个实例变得运行不正常,服务可以自动将该实例替换为新的正常实例。 在替换过程中,可能会有一段短时间,上一个实例不可用,而新实例尚未准备好处理流量。 若要缓解这些影响,请部署应用服务计划的多个实例。
使用部署槽位。 应用服务 部署槽位 可实现应用程序的零停机时间部署。 使用部署槽位最大程度地减少对用户的部署和配置更改的影响。 部署槽位也会降低应用程序重启的可能性。 重启应用程序会导致暂时性故障。
避免纵向扩展或纵向缩减。 这些操作会更改分配给每个实例的 CPU、内存和其他资源,并且可以触发应用程序重启。 应选择满足典型负载下的性能要求的层级和实例大小。 若要横向扩展和缩减,请动态添加和移除实例以处理流量变化。
应对可用区故障的弹性
可用性区域 是每个 Azure 区域内物理上独立的数据中心群组。 当某个区域发生故障时,服务可以转移至剩余区域中的一个。
对于 高级 v2 到 v3 层,可以将应用服务配置为 区域冗余,这意味着资源分布在多个可用性区域。 跨多个区域分布有助于生产工作负载实现复原能力和可靠性。 在应用服务计划中配置区域冗余时,使用该计划的所有应用都会成为区域冗余。
Requirements
若要启用区域冗余,必须满足以下要求:
区域支持: 对于应用服务 高级 v2 和 v3 计划,支持 可用性区域的任何区域都支持区域冗余。
计划类型: 使用 高级 v2 到 v3 计划类型。
最小实例数: 在计划中部署至少两个实例。
缩放单位: 应用必须部署到支持可用性区域的缩放单元。 你不会直接控制计划使用的缩放单元。 相反,在创建应用服务计划时,计划会根据它所属资源组被分配到一个缩放单元。 若要确定应用服务计划的缩放单元是否支持区域冗余,请参阅检查应用服务计划的区域冗余支持。
如果应用服务计划位于不支持区域冗余的缩放单元上,则无法对计划启用区域冗余。 相反,需要将 应用重新部署到不同缩放单元上的新计划。
跨区域的实例分布
创建区域冗余应用服务计划时,Azure 将计划实例分发到区域中的各可用性区域。 即使一个区域遇到中断,此分发也可确保应用仍然可用。
区域冗余部署中的实例分发遵循特定规则。 在应用进行横向扩展和缩减时,这些规则也适用:
最小实例数: 应用服务计划必须至少有两个实例才能实现区域冗余。
计划支持的最大可用性区域: Azure 确定计划可以使用的可用性区域数,称为 maximumNumberOfZones。 若要查看特定计划可以使用的可用性区域数,请参阅检查应用服务计划的区域冗余支持。
实例分发:启用区域冗余后,Azure 会自动在多个可用性区域中分发计划实例。 分发基于以下规则:
如果实例数超过 maximumNumberOfZones 并均分,Azure 会将实例均匀分发到各个区域。
如果实例数未均分,Azure 会将剩余实例分发到剩余区域。
当应用服务平台为区域冗余的应用服务计划分配实例时,它使用基础 Azure 虚拟机规模集提供的尽力区域均衡。 如果每个区域具有相同数量的 VM 或与其他所有区域差一个实例,则计划是均衡的。 有关详细信息,请参阅区域均衡。
物理区域放置: 可以查看用于每个应用服务计划实例 的物理可用性区域 。 有关详细信息,请参阅 查看应用服务计划的物理区域。
Considerations
对于 高级 v2 到 v3 计划,可用性区域中断可能会影响 Azure 应用服务的某些方面,即使应用程序继续为流量提供服务。 这些行为包括应用服务计划缩放、应用程序创建、应用程序配置和应用程序发布。
在应用服务 高级 v2 到 v3 计划中启用区域冗余时,还可以在平台更新期间提高复原能力。 有关详细信息,请参阅服务维护期间的可靠性。
对于未配置为区域冗余的应用服务计划,基础虚拟机 (VM) 实例无法针对可用性区域故障进行复原。 在该地区的任何区域发生故障时,它们可能会经历停机。
Cost
使用应用服务 高级 v2 到 v3 计划时,如果有多个实例,则启用可用性区域不会增加成本。 费用基于应用服务计划 SKU、指定的容量以及根据自动缩放条件缩放到的任何实例。
如果启用可用性区域但指定容量小于 2,则平台将强制实施最小实例计数 2。 平台会向你收取这两个实例的费用。
配置可用性区域支持
创建新的区域冗余应用服务计划。 有关详细信息,请参阅创建包含区域冗余的新应用服务计划。
在现有应用服务计划中启用或禁用区域冗余。 有关详细信息,请参阅设置现有应用服务计划的区域冗余。
容量计划和缩放
为应对可用区故障,请考虑超量配置应用服务计划的容量。 此方法允许解决方案容许某些容量丢失并继续正常运行,而不会降低性能。 有关详细信息,请参阅使用过度预配管理容量。
所有区域正常时的行为
以下列表描述了当为应用服务计划配置了区域冗余并且所有可用性区域均可运行时应发生的情况:
区域之间的流量路由:正常操作期间,流量会在所有可用性区域的所有可用应用服务计划实例之间进行路由。
区域之间的数据复制: 在正常作期间,应用程序文件系统中存储的任何状态都存储在区域冗余存储中,并在可用性区域之间同步复制。
区域故障期间的行为
即使应用程序继续提供流量,可用性区域中断也可能会影响应用服务的某些方面。 这些行为包括应用服务计划缩放、应用程序创建、应用程序配置和应用程序发布。
以下列表描述了当为应用服务计划配置了区域冗余并且一个或多个可用性区域不可用时应发生的情况:
- 检测和响应: 应用服务平台会自动检测可用性区域中的故障并启动响应。 无需手动干预即可启动区域故障转移。
通知:Azure 不会在区域关闭时自动通知你。 然而:
可以使用 Azure 资源运行状况 监视单个资源的运行状况,并且可以设置 资源运行状况警报 来通知问题。
可以使用 Azure 服务运行状况 来了解服务的总体运行状况,包括任何区域故障,并且可以设置 服务运行状况警报 来通知问题。
活动请求:连接到故障可用性区域中的应用服务计划实例的任何正在进行的请求将终止。 重试这些请求。
流量重新路由:应用服务从该区域检测丢失的实例,并尝试查找新的替换实例。 应用服务找到替换项后,会根据需要跨新实例分发流量。
如果自动缩放已配置并确定需要更多实例,它将从应用服务请求实例。 自动缩放行为与应用服务平台行为无关。 因此,实例计数规范不需要是二的倍数。 有关详细信息,请参阅在应用服务中扩展应用和自动缩放概述。
Important
在区域发生故障的情况下,Azure 不保证可以成功请求更多实例。 平台会尝试尽最大努力回填丢失的实例。 如果在可用性区域故障期间需要有保证的容量,请创建和配置应用服务计划以通过过度预配容量来应对区域损失的情况。
非运行时间行为:即使可用性区域遇到服务中断,区域冗余应用服务计划中的应用程序也会继续运行并提供流量。 但是,在可用性区域中断期间,非运行时间行为可能会受到影响。 这些行为包括应用服务计划缩放、应用程序创建、应用程序配置和应用程序发布。
区域恢复
当可用性区域恢复时,应用服务会自动在恢复的可用性区域中创建实例,删除在其他可用性区域中创建的任何临时实例,并像往常一样路由实例之间的流量。
测试区域故障
Azure 应用服务平台管理区域冗余应用服务计划的流量路由、故障转移和故障恢复。 此功能是完全托管的,因此无需启动或验证可用性区域故障流程。
对区域范围的故障的复原能力
应用服务是单区域服务。 如果该地区不可用,应用程序也会不可用。
用于复原的自定义多区域解决方案
若要降低影响应用程序的单区域故障的风险,可以跨多个区域部署计划。 以下步骤有助于增强复原能力:
- 将应用程序部署到每个地区的方案。
- 配置负载均衡和故障转移策略。
- 跨区域复制数据,以便恢复最后一个应用程序状态。
请考虑以下相关资源:
备份和还原
使用基本层级或更高层级时,可以使用应用服务备份和还原功能将应用服务应用备份到文件。
当重新部署代码很困难或者将状态存储在磁盘上时,这些功能会有所帮助。 大多数解决方案不应只依赖于备份。 请改用本指南中的其他功能来支持复原要求。 但是,备份可以防范其他方法没有的一些风险。
Important
从 2028 年 3 月 31 日起,Azure 应用服务自定义备份 将不再支持备份链接的数据库。 有关详细信息,请参阅 弃用链接的数据库备份 。
请改用链接数据库的本机备份和还原工具。 有关详细信息,请参阅 在应用服务中备份和还原应用。
服务维护期间的系统弹性能力
应用服务执行常规服务升级和其他维护任务。 为了在升级期间保持预期容量,平台会在升级过程中自动添加应用服务计划的额外实例。
启用区域冗余。 在应用服务计划中启用区域冗余时,还可以在平台更新期间提高复原能力。 更新域由更新期间脱机的 VM 集合组成,它们映射到可用性区域。 在应用服务计划中部署多个实例并为计划启用区域冗余会在升级期间实例或区域不正常时增加额外的复原层。
有关详细信息,请参阅应用服务的例行计划内维护和应用服务的例行维护、重启和停机。
服务级别协议
Azure 服务的服务级别协议 (SLA) 描述了每个服务的预期可用性,以及解决方案为实现该可用性预期而必须满足的条件。 有关详细信息,请参阅 联机服务的 SLA。
部署区域冗余应用服务计划时,SLA 中定义的运行时间百分比会增加。