Azure 应用服务的可靠性

本文介绍 Azure 应用服务中的可靠性支持,内容涵盖了使用可用性区域实现的地区内复原能力,以及有关多地区部署的信息。

由于复原能力是你与 Microsoft 的共同责任,因此本文还介绍了生成满足需求的可复原解决方案的方法。

Azure 应用服务是一项基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端 。 Azure 应用服务可将 Azure 的强大功能(包括安全性、负载均衡、自动缩放和自动管理功能)添加到应用程序。 若要了解 Azure 应用服务如何增强应用程序工作负载的可靠性和复原能力,请参阅为何使用应用服务?

部署 Azure 应用服务时,可以创建多个应用服务计划实例,该计划表示运行应用程序代码的计算辅助角色。 尽管平台努力跨不同的容错域部署实例,但它不会自动将实例分散到多个可用性区域。

生产部署建议

对于生产部署,应该:

  • 使用高级 v3 应用服务计划。
  • 启用区域冗余,这要求应用服务计划至少使用三个实例。

暂时性故障

暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 经过短暂的时间后,它们就会自我纠正。 应用程序必须能够处理暂时性故障,处理方式通常是重试受影响的请求。

与任何云托管 API、数据库和其他组件通信时,所有云托管应用程序都应遵循 Azure 的暂时性故障处理指南。 要详细了解如何处理暂时性故障,请参阅暂时性故障处理建议

尽管 Microsoft 提供的 SDK 通常可以处理暂时性故障,但由于你在 Azure 应用服务上托管了自己的应用程序,因此需要考虑如何避免引起暂时性故障,方法是确保:

  • 部署计划的多个实例。 Azure 应用服务对你的计划实例执行自动更新和其他形式的维护。 如果某个实例变得运行不正常,服务可以自动将该实例替换为新的正常实例。 在替换过程中,可能会有一小段时间前一个实例不可用,而新实例尚未准备好为提供流量。 可以通过部署多个应用服务计划实例来缓解此行为的影响。

  • 使用部署槽位。 Azure 应用服务部署槽位可实现应用程序的零停机部署。 使用部署槽位可最大程度减少部署和配置更改对用户的影响。 使用部署槽位还可以降低应用程序重启的可能性,从而避免由此导致的暂时性故障。

  • 避免纵向扩展或缩减。 应选择满足典型负载下的性能要求的层级和实例大小。 仅通过横向扩展实例来处理流量的更改。 应考虑到纵向缩放可能触发应用程序重启。

可用性区域支持

可用性区域是每个 Azure 区域内在物理上独立的数据中心组。 当一个区域发生故障时,服务可以故障转移到其余区域中的一个。

有关 Azure 中可用性区域的详细信息,请参阅什么是可用性区域?

Azure 应用服务可以配置为区域冗余,这意味着资源分散在多个可用性区域。 分散在多个区域中有助于生产工作负载实现复原能力和可靠性。 可用性区域支持是应用服务计划的一个属性。

使用区域冗余部署的实例扩展是在以下规则中确定的,即使在应用横向缩减时也是如此:

  • 最小应用服务计划实例计数为 3。
  • 如果指定容量大于 3,并且实例数可被 3 整除,则这些实例会均匀分布。
  • 任何超过 3*N 的实例计数会分布在剩余的一两个区域中。

在应用服务平台为区域冗余应用服务计划分配实例时,它使用由基础 Azure 虚拟机规模集提供的最大程度区域均衡。 如果每个区域具有相同数量的 VM,或者与在应用服务计划使用的所有其他区域中的 VM 数相差 1,则应用服务计划“已实现均衡”。

对于未配置为区域冗余的应用服务计划,VM 实例无法针对可用性区域故障进行复原。 在该地区的任何区域发生中断期间,它们可能会出现停机。

支持的区域

区域冗余应用服务计划可以部署在支持可用性区域的任何地区

若要查看哪些区域支持适用于应用服务环境 v3 的可用性区域,请查看区域

要求

  • 必须使用高级版 v2 或高级版 v3 计划类型

  • 可用性区域仅在较新的应用服务占用情况中受支持。 即使使用的是某个受支持的区域,如果资源组不支持可用性区域,也会收到错误。 若要确保工作负载位于支持可用性区域的缩放单元上,可能需要创建新的资源组、应用服务计划和应用服务。

  • 必须至少部署三个计划实例。

注意事项

即使一个地区中的多个区域发生中断,部署在区域冗余应用服务计划中的应用程序也可继续运行并提供流量。 但是,在可用性区域中断期间,非运行时行为(包括应用服务计划缩放、应用程序创建、应用程序配置和应用程序发布)仍可能会受到影响。 应用服务计划的区域冗余仅确保已部署应用程序的持续正常运行时间。

成本

使用 Azure 应用服务高级版 v2 或高级版 v3 计划时,只要在应用服务计划中有三个或更多实例,就不会产生与启用可用性区域相关的额外费用。 将根据应用服务计划 SKU、指定的容量以及根据自动缩放条件扩展到的任何实例向你收费。 如果启用可用性区域但指定的容量小于 3,则平台会强制执行最小实例计数 3,并针对这 3 个实例向你收费。

应用服务环境 v3 具有针对区域冗余的特定定价模型。 有关应用服务环境 v3 的定价信息,请查看定价

配置可用性区域支持

要部署新的区域冗余 Azure 应用服务计划,请在部署计划时选择“区域冗余”选项

要部署新的区域冗余 Azure 应用服务环境,请参阅创建应用服务环境

只能在创建新的应用服务计划时配置区域冗余。 如果现有应用服务计划不是区域冗余的,则需要将其替换为新的区域冗余计划。 无法将现有应用服务计划转换为使用可用性区域。 同样,无法在现有应用服务计划中禁用区域冗余。

容量计划和缩放

要为可用性区域失败做好准备,应过度预配服务容量,以确保解决方案可以容忍 1/3 的容量损失,并在区域范围的中断期间继续正常运行,而不会降低性能。 由于平台将 VM 分散到三个区域,并且你至少需要考虑一个区域的故障,因此将峰值工作负载实例计数乘以“区域/(区域-1)”或 3/2。 例如,如果你的典型峰值工作负载需要四个实例,则应预配六个实例:(2/3 * 6 个实例)= 4 个实例。

区域之间的流量路由

在正常操作期间,流量在所有可用性区域中的所有可用应用服务计划实例之间路由。

区域关闭体验

检测和响应:应用服务平台负责检测可用性区域中的故障并做出响应。 你无需执行任何操作即可启动区域故障转移。

活动请求:当某个可用性区域不可用时,连接到故障可用性区域中的应用服务计划实例的任何正在进行的请求都将终止,并需要重试

流量重新路由:某个区域不可用时,Azure 应用服务会检测该区域中丢失的实例。 它会自动尝试查找新的替换实例。 然后,它会根据需要将流量分散到新实例。

如果配置了自动缩放,并且如果确定需要更多实例,则自动缩放还会向应用服务发出添加更多实例的请求。

注意

自动缩放行为与应用服务平台行为无关。 自动缩放实例计数规范不需要是三的倍数。

重要

无法保证在某个区域发生故障的情况下,针对更多实例的请求一定会成功。 系统会尽最大努力对丢失的实例进行回填。 如果需要在可用性区域丢失时保证容量,则应创建并配置应用服务计划以应对丢失区域的情况。 为此,可以超量预配应用服务计划的容量

故障回复

当可用性区域恢复时,Azure 应用服务会自动在恢复的可用性区域中创建实例,移除在其他可用性区域中创建的任何临时实例,并在实例之间正常路由流量。

测试区域故障

区域冗余应用服务计划的流量路由、故障转移和故障回复由 Azure 应用服务平台管理。 由于此功能是完全托管的,因此你无需启动或验证可用性区域故障流程。

多区域支持

Azure 应用服务是单地区服务。 如果该地区不可用,应用程序也会不可用。

备用多地区解决方案

为了确保应用程序不易受单地区故障的影响,需要将应用程序部署到多个地区。 为此,你应该:

  • 将应用程序部署到每个地区中的实例。
  • 配置负载均衡和故障转移策略。
  • 跨地区复制数据,以便可以恢复最近的应用程序状态。

有关说明此体系结构的示例方法,请参阅使用应用服务环境进行高可用性企业部署

备份

使用基本层级或更高层级时,可以使用应用服务备份和还原功能将应用服务应用备份到文件。 如果很难重新部署代码,或者将状态存储在磁盘上,则此功能非常有用。 但是,对于大多数解决方案,不应依赖于应用服务备份,而应改用本文中所述的其他方法来支持复原要求。

服务级别协议 (SLA)

Azure 应用服务的服务级别协议 (SLA) 描述了服务的预期可用性。 它还描述了实现可用性预期必须满足的条件。

部署区域冗余应用服务计划时,SLA 中定义的运行时间百分比会增加。