本文介绍了 Azure 应用服务中的可靠性支持。 它涵盖了使用可用性区域实现的区域内复原能力,以及有关多区域部署的信息。
复原能力是你与 Microsoft 共同的责任。 本文还介绍了构建满足你需求的弹性解决方案的方法。
Azure 应用服务是一项基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端 。 Azure 应用服务可将 Azure 的强大功能(包括安全性、负载均衡、自动缩放和自动管理功能)添加到应用程序。 若要了解 Azure 应用服务如何增强应用程序工作负载的可靠性和复原能力,请参阅为何使用应用服务?
部署 Azure 应用服务时,可以创建多个应用服务计划实例,该计划表示运行应用程序代码的计算辅助角色。 有关详细信息,请参阅 Azure 应用服务计划 。 尽管平台努力跨不同的容错域部署实例,但它不会自动将实例分散到多个可用性区域。
生产部署建议
对于生产部署,您应该:
- 使用高级 v3 应用服务计划。
- 启用区域冗余,这要求应用服务计划至少使用三个实例。
- 启用区域冗余,这要求应用服务计划至少使用三个实例。
暂时性故障
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 经过短暂的时间后,它们就会自我纠正。 应用程序必须能够处理暂时性故障,处理方式通常是重试受影响的请求。
与任何云托管 API、数据库和其他组件通信时,所有云托管应用程序都应遵循 Azure 的暂时性故障处理指南。 要详细了解如何处理暂时性故障,请参阅暂时性故障处理建议。
Microsoft 提供的 SDK 通常处理暂时性故障。 由于你在 Azure 应用服务上托管了自己的应用程序,因此需要考虑如何避免引起暂时性故障,方法是确保:
部署计划的多个实例。 Azure 应用服务对你的计划实例执行自动更新和其他形式的维护。 如果某个实例变得运行不正常,服务可以自动将该实例替换为新的正常实例。 在替换过程中,可能会有一小段时间,之前的实例不可用,而新实例尚未准备好处理流量。 可以通过部署多个应用服务计划实例来缓解此行为的影响。
使用部署槽位。 Azure 应用服务部署槽位可实现应用程序的零停机部署。 使用部署槽位可最大程度减少部署和配置更改对用户的影响。 使用部署槽位还可以降低应用程序重启的可能性。 重启会导致暂时性故障。
避免纵向扩展或缩减。 应选择满足典型负载下的性能要求的层级和实例大小。 仅横向扩展实例数量来处理流量变化。 纵向扩展或缩减可能触发应用程序重启。
可用性区域支持
可用性区域是每个 Azure 区域内在物理上独立的数据中心组。 当某个区域发生故障时,服务可以转移至剩余区域中的一个。
有关 Azure 中可用性区域的详细信息,请参阅什么是可用性区域?
Azure 应用服务可以配置为区域冗余,这意味着资源分散在多个可用性区域中。 分散在多个区域中有助于生产工作负载实现复原能力和可靠性。 可用性区域支持是应用服务计划的一个属性。
使用区域冗余部署分布的实例使用以下规则确定。 即使在应用进行扩缩时,这些规则也适用:
最小应用服务计划实例计数为 3。
如果指定容量大于 3,并且实例数可被 3 整除,则这些实例会均匀分布。
超过 3*N 的任何实例计数将分布在剩余的一两个区域中。
注意
在某些情况下,您的工作负载被托管在一个缩放单元(也称为 stamp 或 VMSS 计算集群)上,该集群部署在两个区域而不是三个区域。 对于这些情况,如果实例数能被 2 整除,则实例均匀地分布在两个可用区中。 超出 2*n 的任何实例计数都放置在其中一个区域中。
在应用服务平台为区域冗余的应用服务计划分配实例时,它使用由基础 Azure 虚拟机规模集提供的最佳化区域均衡。 当每个区域与其他所有区域相比,其所拥有的虚拟机数量相同,或者相差不超过一个时,应用服务计划被视为均衡。 有关详细信息,请参阅区域均衡。
对于未配置为区域冗余的应用服务计划,虚拟机实例无法针对可用性区域故障进行复原。 在该地区的任何区域发生故障时,它们可能会经历停机。
支持的区域
区域冗余应用服务计划可以部署在支持可用性区域的任何地区。
若要查看哪些区域支持适用于应用服务环境 v3 的可用性区域,请查看区域。
要求
必须使用高级版 v2 或高级版 v3 计划类型。
可用性区域仅在较新的应用服务占用情况中受支持。 即使您使用的是某个受支持的区域,如果资源组不支持可用性区域,也会出现错误。 若要确保工作负载位于支持可用性区域的标记上,可能需要创建新的资源组、应用服务计划和应用服务。
- 必须至少部署三个计划实例。
注意事项
即使一个地区中的多个区域发生中断,部署在区域冗余应用服务计划中的应用程序也可继续运行并提供流量。 在可用性区域中断期间,非运行时行为仍可能受到影响。 这些行为包括应用服务计划缩放、应用程序创建、应用程序配置和应用程序发布。 应用服务计划的区域冗余仅确保已部署应用程序的持续正常运行时间。
成本
使用 Azure 应用服务高级版 v2 或高级版 v3 计划时,只要在应用服务计划中有三个或更多实例,就不会产生与启用可用性区域相关的额外费用。 根据应用服务计划 SKU、指定的容量以及根据自动缩放条件缩放到的任何实例收费。
如果启用可用性区域但指定的容量小于 3,则平台会强制执行最小实例计数 3。 平台会针对这 3 个实例向你收费。
应用服务环境 v3 具有针对区域冗余的特定定价模型。 有关应用服务环境 v3 的定价信息,请查看定价。
配置可用性区域支持
要部署新的区域冗余 Azure 应用服务计划,请在部署计划时选择“区域冗余”选项。
要部署新的区域冗余 Azure 应用服务环境,请参阅创建应用服务环境。
只能在创建新的应用服务计划时配置区域冗余。 如果现有应用服务计划不是区域冗余的,则需要将其替换为新的区域冗余计划。 无法将现有应用服务计划转换为使用可用性区域。 同样,无法在现有应用服务计划中禁用区域冗余。
容量计划和缩放
要防范可用性区域故障,请考虑过度预配集成运行时的容量。 超额预配使解决方案能够容忍一定程度的容量损失,并且仍然可以继续运行而不会降低性能。 要了解有关过度预配的更多信息,请参阅通过过度预配管理容量。
区域间的流量路由
正常操作期间,流量会在所有可用性区域的所有可用应用服务计划实例之间进行路由。
区域关闭体验
检测和响应。 应用服务平台负责检测可用性区域中的故障并做出响应。 无需执行任何操作即可启动区域故障转移。
活动请求。 当某个可用性区域不可用时,连接到故障可用性区域中的应用服务计划实例的任何正在进行的请求都将终止。 它们需要被重试。
交通改道。 某个区域不可用时,Azure 应用服务会检测该区域中丢失的实例。 它会自动尝试查找新的替换实例。 然后,它会根据需要将流量分散到新实例。
如果配置了自动缩放,并且如果确定需要更多实例,则自动缩放还会向应用服务发出添加更多实例的请求。 有关详细信息,请参阅在 Azure 应用服务中纵向扩展应用。
注意
自动缩放行为与应用服务平台行为无关。 自动缩放实例计数规范不需要是三的倍数。
重要
在区域宕机情况下,无法保证请求增加实例的操作能够成功。 系统会尽最大努力对丢失的实例进行回填。 如果需要在可用性区域丢失时保证容量,则应创建并配置应用服务计划以应对丢失区域的情况。 为此,可以超量预配应用服务计划的容量。
故障回复
当可用性区域恢复时,Azure 应用服务会自动在恢复的可用性区域中创建实例,移除在其他可用性区域中创建的任何临时实例,并在实例之间正常路由流量。
对区域故障进行测试
Azure 应用服务平台管理区域冗余应用服务计划的流量路由、故障转移和故障恢复。 由于此功能是完全托管的,因此你无需启动或验证可用性区域故障流程。
多区域支持
Azure 应用服务是单地区服务。 如果该地区不可用,应用程序也会不可用。
替代多区域解决方案
为了确保应用程序不易受单一区域故障的影响,需要将应用程序部署到多个区域:
- 将您的应用程序部署到每个区域的实例。
- 配置负载均衡和故障转移策略。
- 跨地区复制数据,以便可以恢复最近的应用程序状态。
有关说明此方法的示例体系结构,请参阅:
有关说明此体系结构的示例方法,请参阅使用应用服务环境进行高可用性企业部署。
备份
使用基本层级或更高层级时,可以使用应用服务备份和还原功能将应用服务应用备份到文件。 有关详细信息,请参阅在 Azure 应用服务中备份和还原应用。
如果很难重新部署代码,或者将状态存储在磁盘上,则此功能非常有用。 对于大多数解决方案,不应依赖应用服务备份。 请使用本文中所述的其他方法来支持复原要求。
服务级别协议 (SLA)
Azure 应用服务的服务级别协议 (SLA) 描述了服务的预期可用性。 它还描述了实现可用性预期必须满足的条件。
部署区域冗余应用服务计划时,SLA 中定义的运行时间百分比会增加。