你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure API 管理中的可靠性

Azure API 管理是一项完全托管的服务,可帮助组织发布、保护、转换、维护和监视 API。 该服务充当位于 API 使用者和后端服务之间的网关,提供身份验证、速率限制、响应缓存和请求/响应转换等基本功能。 API 管理使组织能够创建一致且安全的 API 体验,同时抽象化底层后端服务的复杂性。

Azure API 管理提供了多个可靠性功能,旨在确保 API 基础结构的高可用性和容错能力。 该服务通过多个部署单元、可用性区域之间的自动故障转移功能以及全局 API 分发的多区域部署选项提供内置冗余。 API 管理包括智能流量路由、运行状况监视和自动重试机制,这些机制可帮助维护服务连续性,即使在基础结构故障或高流量方案中也是如此。

本文介绍 Azure API 管理的可靠性,包括可用性区域和多区域支持。 有关 Azure 中可靠性的更详细概述,请参阅 Azure 可靠性

可靠性体系结构概述

Azure API 管理使用基于缩放单元的体系结构来提供内置的冗余和可伸缩性。 部署 API 管理实例时,可以配置一个或多个 缩放单元单元。 每个单元都是容量的逻辑表示形式,其中包含处理 API 请求所需的计算资源。

配置包含两个或更多个单元的实例时,可用单元协同工作来处理请求并提供自动负载均衡。 如果其中一个单元不可用,则剩余的单元将继续处理流量,但容量可能会降低。

为了获得更高的可靠性级别,API 管理支持跨区域和多个区域跨可用性区域的单元分布。

Azure API 管理服务层提供不同级别的可靠性:

  • 高级层(经典):支持可在可用性区域和区域之间分布的多个单元,以实现最大复原能力。 在高级层中,每个单元由两个虚拟机(VM)组成,这些虚拟机提供用于处理 API 请求的计算资源。
  • 基本 v2、标准、标准 v2 和高级 v2(预览版) 层:所有层都支持单个数据中心内的多个单元。 它们不支持可用性区域或多区域部署。
  • 开发人员层:仅支持单个单元,不提供可用性区域或多区域支持。 此层专为开发和测试方案而设计,不适合生产工作负荷。
  • 消耗层:Azure API 管理的消耗层具有内置的弹性能力,对单个 Azure 数据中心内的一系列故障具有弹性。 但是,消耗层不支持可用性区域或多区域部署。 若要了解消耗层 Azure API 管理实例的预期运行时间,请查看 服务级别协议

实例中的单元协同工作来处理请求,并在可用单位之间进行自动负载均衡。 如果某个单元不可用,剩余单位将继续处理流量,但容量可能会降低。

注释

Azure API 管理的“开发人员”和“高级”层级支持自托管网关,你可以在自己的基础设施上运行该网关。 使用自托管网关时,您负责配置它们以满足您的可靠性要求。 自托管网关不在本文讨论的范围内。

生产部署建议

若要了解如何部署 Azure API 管理以支持解决方案的可靠性要求,以及可靠性如何影响体系结构的其他方面,请参阅 Azure Well-Architected Framework 中 Azure API 管理的体系结构最佳做法

暂时性故障

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

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

在 API 前面使用 Azure API 管理时,可能需要重试由于暂时性故障而失败的请求。 为了防止后端 API 因请求过多而不知所措,API 管理提供重试、速率限制和配额策略。 还可以使用 后端资源配置负载均衡和断路器功能。

可用性区域支持

可用性区域 是每个 Azure 区域内物理上独立的数据中心群组。 当某个区域发生故障时,服务可以切换到其他可用的区域。

在受支持的区域中部署高级(经典)API 管理实例时,Azure API 管理提供两种类型的可用性区域支持:

  • 自动。 如果未指定要使用的可用性区域,Azure API 管理将提供自动可用性区域支持。

  • 手动。 当你显式指定要使用的可用性区域时,Azure API 管理提供手动可用性区域支持。

借助可用性区域支持,Azure API 管理跨区域复制服务组件以实现高可用性。 在主要区域中,这些组件包括网关(缩放单元)、管理平面和开发人员门户。 在次要区域中,仅复制网关单元。 有关次要区域的详细信息,请参阅 多区域支持

自动可用性区域支持

借助自动可用性区域支持,可以选择单个单元或多单元实例配置来实现区域冗余:

  • 多单元配置(建议) 如果实例有两个或更多个单元,Azure API 管理会尽最大努力将实例的单位分散到区域的可用性区域中。 无法确定您的单元会被放置到哪些可用区域。 为了获得可用性区域的最大优势,建议至少部署三个单元,这些单元可以分布在区域中的所有可用区域。

  • 单个单元配置。 如果实例有单个单元,则单元的基础 VM 将分发到两个可用性区域。 无法确定该单元的虚拟机被放置在哪些可用性区域。

手动可用区支持

如果要显式选择要使用的可用性区域,可以在区域冗余配置和区域配置之间进行选择:

  • 区域冗余:为受支持区域中的 API 管理实例手动配置区域冗余,以便为服务组件提供冗余。 选择要使用的两个或更多可用性区域时,Azure 会自动跨所选区域复制服务组件。

  • 区域:API 管理服务组件部署在 Azure 区域中选择的单个区域中。 所有单元都放置在同一可用性区域中。

    重要

    仅当 跨区域延迟 过高而无法满足需求时,才建议固定到单个可用性区域,并且已验证延迟不符合要求时。 区域实例本身不会为可用性区域中断提供复原能力。 若要提高区域 API 管理部署的复原能力,需要将单独的实例显式部署到多个可用性区域,并配置流量路由和故障转移。

区域支持

在所有支持可用性区域的 Azure 区域中,Azure API 管理为“高级(经典)”层级提供可用性区域支持。

要求

必须使用高级(经典)层来配置可用性区域支持。 Azure API 管理不支持经典的 Consumption、Developer、Basic 和 Standard 层中的可用性区域,目前也不支持 Basic v2、Standard v2 或 Premium v2 层中的可用性区域。 若要将实例升级到高级(经典)层,请参阅 升级到高级层

注释

具有企业功能的 Premium v2 层处于预览状态。 为了确定您的设计是否应依赖于抢先体验功能或普遍可用功能,请评估您的设计和实施时间线,并与有关 Premium v2 发布和迁移路径的可用信息进行比较。

注意事项

  • 区域冗余实例的单位数: 如果手动为实例配置区域冗余,则还需要配置许多 API 管理单元,这些单元可以均匀分布在所有所选可用性区域。 例如,如果选择两个区域,则必须至少配置两个单元。 也可以改为配置四个单元,或其他二的倍数个单元。 如果选择三个可用性区域,则必须配置三个单元、6 个单位或三个单元的另外多个单位。

    如果只是使用自动可用性区域支持,则无需使用特定数量的单位。 部署的单元将以“尽力而为”的方式分布在各个可用性区域中。 对于最大区域冗余,建议至少使用三个单位来确保可用性区域中断不会影响实例。

    若要确定提供所需网关性能的单位数,请使用 容量指标 和你自己的测试。 有关缩放和升级服务实例的详细信息,请参阅 升级和缩放 Azure API 管理实例

  • 自动缩放: 如果在配置自动缩放的 API 管理实例上手动配置可用性区域,则可能需要在配置后调整自动缩放设置。 在这种情况下,自动缩放规则和限制中的 API 管理单元数必须是区域数的倍数。 如果只是使用自动可用性区域支持,则无需调整自动缩放设置。

  • IP 地址要求: 在外部或内部虚拟网络中部署的 API 管理实例上启用可用性区域支持时,当前必须指定要使用的实例的公共 IP 地址资源。 在内部虚拟网络中,公共 IP 地址仅用于管理操作,而不用于 API 请求。 详细了解 API 管理的 IP 地址

成本

无论可用性区域配置如何,如果添加更多单位,则会产生更大的成本。 有关信息,请参阅 API 管理定价

配置可用性区域支持

本部分介绍如何为 Azure API 管理实例配置可用性区域支持。

注释

选择要使用的可用性区域时,实际上是在选择逻辑可用性区域。 如果你在不同的 Azure 订阅中部署其他工作负载组件,它们可能会使用不同的逻辑可用性区域编号来访问相同的物理可用性区域。 有关详细信息,请参阅 物理和逻辑可用性区域

  • 创建支持可用性区域的 API 管理实例: 在支持可用性区域的区域中创建高级(经典)API 管理实例时,默认使用可用性区域支持创建。 可以选择自动可用性区域支持,或手动配置区域或区域冗余支持。

  • 启用或重新配置可用性区域支持: 可以更改 API 管理实例的可用性区域配置,包括添加可用性区域并在可用性区域之间移动区域实例。 若要在 API 管理实例上配置可用性区域支持,请参阅 在 Azure API 管理实例上启用可用性区域支持。 任何配置选项都没有停机时间要求。

    更改可用性区域配置时,更改可能需要 15 到 45 分钟(或更长时间)才能应用。 在此期间,API 管理网关可以继续处理 API 请求。

    更改可用性区域配置会触发公共和专用 IP 地址更改

容量计划和管理

在可用区宕机的情况下,不能保证在另一个可用区请求增加容量会成功。 系统会尽最大努力对丢失的单元进行回填。 如果在可用性区域丢失时需要保证的容量,则应创建并配置 API 管理实例以考虑丢失区域。 为此,可以执行以下操作:

  • 超额配置 API 管理实例的单元
  • 使用自动或区域冗余的可用区配置

若要详细了解过度预配的原则,请参阅 使用过度预配管理容量

使用 容量指标 和你自己的测试来确定提供所需网关性能的单位数。 有关缩放和升级服务实例的详细信息,请参阅 升级和缩放 Azure API 管理实例

常规操作

本部分介绍当 Azure API 管理实例配置了可用性区域支持且所有可用性区域均正常运行时的预期情况。

  • 区域之间的流量路由: 在正常作期间,流量将在所有所选可用性区域的所有可用 API 管理单元之间路由。

  • 区域之间的数据复制: Azure API 管理存储并复制以下数据:

    • 网关配置(如 API 和策略定义)在为实例选择的可用性区域之间定期同步。 可用性区域之间的更新传播通常少于 10 秒。
    • 如果您使用 Azure API 管理提供的内部缓存,则缓存中的数据可以在内部缓存中找到。 缓存条目分布在可用性区域之间。 内部缓存是易失性的,数据不能保证持久化。 如果需要保留缓存的数据,请考虑使用外部缓存。
    • 速率限制计数器,如果您使用 Azure API 管理提供的速率限制功能。 速率限制计数器在为实例选择的可用性区域之间异步复制。

区域关闭体验

本部分介绍使用可用性区域支持配置 Azure API 管理实例并发生可用性区域中断时会发生什么情况。

  • 检测和响应: 检测和响应的责任取决于实例使用的可用性区域配置。

    • 自动和区域冗余: 对于配置为使用自动可用性区域支持或手动配置为使用区域冗余的实例,Azure API 管理平台负责检测可用性区域中的故障并做出响应。 无需执行任何操作即可启动区域故障转移。

    • 区域性:对于配置为区域性的实例,需要检测可用性区域的丢失情况,并启动到在另一个可用性区域中创建的辅助实例的故障转移。

  • 活动请求: 当可用性区域不可用时,连接到故障可用性区域中的 API 管理单元的任何正在进行的请求都将终止,需要重试。

  • 通知: 区域级别中断反映在 Azure 资源运行状况和 Azure 服务运行状况中。

  • 预期数据丢失: API 管理存储以下数据:

    • 网关配置更改,这些更改将在大约 10 秒内复制到每个选定的可用性区域。 如果发生可用性区域中断,可能会丢失尚未复制的配置更改。
    • 内部缓存中的数据,如果您使用内部缓存功能。 内部缓存是易失性的,数据不能保证持久化。 在可用性区域中断期间,某些或所有缓存的数据可能会丢失。 如果需要保留缓存的数据,请考虑使用外部缓存。
    • 如果使用速率限制功能,则会有速率限制计数器。 在某个可用性区域发生中断期间,存活区域中的速率限制计数器可能无法保持最新状态。
  • 预期的停机时间: 预计的停机时间取决于实例使用的可用性区域配置:

    • 自动: 使用自动可用性区域支持的实例预计在可用性区域中断期间不会停机。 不受影响区域或区域中的单位将继续工作。

      使用自动可用性区域支持的实例(但具有单个单元)也预计不会停机。 在这种情况下,API 管理会将单元的基础 VM 分发到两个区域。 未受影响的区域中的 VM 将继续工作。

    • 区域冗余: 区域冗余实例预计在可用性区域中断期间不会停机。

    • 区域性: 对于区域性实例,当某个可用区不可用时,您的实例将一直不可用,直到该可用区恢复为止。

  • 流量重新路由: 流量重新路由行为取决于实例使用的可用性区域配置。

    • 自动和区域冗余: 对于配置为使用自动可用性区域支持或手动配置为使用区域冗余的实例,当某个区域不可用时,受影响区域中的任何单元都将不可用。 可以选择缩放实例以添加更多单元。

    • 区域:对于区域实例,当某个区域不可用时,实例不可用。 如果另一个可用性区域中有辅助实例,则负责将流量重新路由到该辅助实例。

故障回复

故障回复行为取决于实例使用的可用性区域配置:

  • 自动和区域冗余: 对于配置为使用自动可用性区域支持或手动配置为使用区域冗余的实例,当可用性区域恢复时,Azure API 管理会自动还原可用性区域中的单元,并按正常方式重新路由单元之间的流量。

  • 区域: 对于区域实例,在可用区恢复后,你负责将流量重新路由到原可用区中的实例。

对区域故障进行测试

测试区域故障的选项取决于实例使用的可用性区域配置:

  • 自动和区域冗余: 对于配置为使用自动可用性区域支持或手动配置为使用区域冗余的实例,Azure API 管理平台管理流量路由、故障转移和故障回复。 由于此功能是完全托管的,因此你无需启动或验证可用性区域故障流程。

  • 区域性的: 对于区域性实例,无法模拟包含您的 Azure API 管理实例的可用性区域故障。 但是,可以手动配置上游网关或负载均衡器,以将流量重定向到不同可用性区域中的其他实例。

多区域支持

使用多区域部署,可以将区域 API 网关添加到一个或多个受支持的 Azure 区域中的现有 API 管理实例。 多区域部署有助于减少地理分布式 API 使用者感知到的任何请求延迟。 如果一个区域脱机,多区域部署也会提高服务可用性。

Azure API 管理仅支持高级层(经典)层中的多区域部署。 在“消耗”“开发人员”“基本”“基本 v2”“标准”“标准 v2”和“高级 v2(预览版)”层级中,它不支持多区域部署。 有关详细信息,请参阅 要求

添加区域时,需配置:

  • 该区域要承载的单位数量。

  • 可用区支持,如果该区域提供可用区。

  • 已添加区域中的虚拟网络设置(如果在现有区域或多个区域中配置了网络)。

区域支持

可以使用支持 Azure API 管理的任何 Azure 区域在高级(经典)层中创建多区域部署。 若要查看哪些区域支持多区域部署,请参阅 “按区域列出的产品可用性”。

要求

必须使用高级(经典)层来配置多区域支持。 若要将实例升级到高级(经典)层,请参阅 升级到高级层

注释

具有企业功能的 Premium v2 层处于预览状态。 为了确定您的设计是否应依赖于抢先体验功能或普遍可用功能,请评估您的设计和实施时间线,并与有关 Premium v2 发布和迁移路径的可用信息进行比较。

注意事项

  • 仅网关: 仅将 API 管理实例的网关组件复制到多个区域。 实例的管理平面和开发人员门户仍仅托管在主要区域,即你最初部署服务的区域。

  • 网络要求: 如果要在虚拟网络中部署 API 管理实例时为 API 管理实例配置辅助位置,虚拟网络和子网区域应与正在配置的辅助位置匹配。 如果要在主要区域中添加、删除或启用可用性区域,或者更改主要区域的子网,API 管理实例的 VIP 地址会更改。 有关详细信息,请参阅 Azure API 管理服务的 IP 地址。 但是,如果要添加次要区域,则主要区域的 VIP 不会更改,因为每个区域都有自己的专用 VIP。

  • DNS 名称: 每个区域的网关(包括主要区域)都有一个遵循 URL 模式 https://<service-name>-<region>-01.regional.azure-api.net的区域 DNS 名称,例如 https://contoso-westus2-01.regional.azure-api.net

成本

添加区域会产生更大的成本。 有关信息,请参阅 API 管理定价

配置多区域支持

若要在 API 管理实例上配置多区域支持,请参阅 将 Azure API 管理实例部署到多个 Azure 区域

若要从 API 管理实例中删除区域,请参阅 “删除 Azure API 管理服务区域”。

容量计划和管理

在区域故障场景中,无法保证在其他区域请求额外容量的操作会成功。 如果在区域丢失时需要有保证的容量,则应创建并配置 API 管理实例以考虑丢失区域。 可以通过超配 API 管理实例的容量来实现这一目标。 若要详细了解过度预配的原则,请参阅 使用过度预配管理容量

在多区域部署中,自动缩放仅适用于主要区域。 次要区域需要进行手动缩放调整,或者使用您控制的自定义工具。

常规操作

本部分介绍使用多区域支持配置 Azure API 管理实例时的预期情况,并且所有区域都正常运行。

  • 区域之间的流量路由: Azure API 管理会自动将传入请求路由到区域网关。 请求会被路由到距客户端延迟最低的区域网关。 如果需要使用不同的路由方法,可以使用自定义路由规则配置自己的流量管理器。 有关详细信息,请参阅 使用自定义路由到 API 管理区域网关

    当请求到达 Azure API 管理区域网关时,它通常路由到后端 API(除非策略直接从网关返回响应,例如缓存的响应或错误代码)。 在多区域解决方案中,需要注意路由到满足性能要求的后端 API 实例。 有关详细信息,请参阅 路由 API 对区域后端服务的调用

  • 区域之间的数据复制: 网关配置(如 API 和策略定义)在添加的主要区域和次要区域之间定期同步。 向区域网关传播更新通常需要不到 10 秒的时间。

    内部缓存中的数据和速率限制计数器特定于区域,并且不会在区域之间复制。

区域故障体验

本部分介绍当 Azure API 管理实例配置了多区域支持,且您所使用的其中一个区域发生中断时的预期情况。

  • 检测和响应:API 管理负责检测区域故障,并自动切换到您所配置的其他区域之一的网关。

  • 活动请求:在故障区域中正在处理的任何活动请求可能会被删除,应由客户端重试。

  • 预期数据丢失:Azure API 管理不会存储数据,但配置、缓存和速率限制计数器除外。

    配置更改将在大约 10 秒内复制到每个区域。 如果主要区域发生中断,可能会丢失尚未复制的配置更改。

    内部缓存中的数据和速率限制计数器特定于区域,不会在区域之间复制。

  • 预期停机时间:预计不会造成网关停机。

    如果主要区域脱机,API 管理平面和开发人员门户将不可用,但次要区域可继续使用最新的网关配置来处理 API 请求。

  • 流量重新路由: 如果某个区域脱机,API 请求会自动围绕失败的区域路由到下一个最近的网关。

故障回复

当主要区域恢复时,Azure API 管理会自动还原区域中的单元,并重新路由单元之间的流量。

测试区域故障

为了做好意外区域中断的准备,建议定期测试对区域故障的响应。 可以通过 禁用路由到区域网关来模拟区域故障的某些方面。

备份

Azure API 管理本身不会存储大多数运行时数据。 但是,可以备份 Azure API 管理服务配置。 备份和还原操作还可用于在操作环境(例如,开发环境和过渡环境)之间复制 API 管理服务配置。

重要

在备份过程中,包括用户和订阅等运行时数据,这可能并不总是可取的。

开发人员层、基本层、标准层和高级层支持备份。

有关 Azure API 管理中的备份的详细信息,请参阅 如何在 Azure API 管理中使用服务备份和还原实现灾难恢复

对于某些服务组件或资源的备份或还原,还可以考虑客户管理的选项,例如 APIOps 工具和 基础结构即代码(IaC)解决方案。

服务维护期间的可靠性

Azure API 管理执行常规服务升级和其他形式的维护。

在“基本”、“标准”和“高级(经典)”级别中,您可以自定义实例在更新过程中的哪个时间收到更新。 如果需要验证升级对工作负荷的影响,请考虑配置测试实例以在更新周期早期接收更新,并将生产实例设置为在周期后期接收更新。 还可以指定维护时段,即希望实例应用服务更新的一天中的时间。

若要了解有关维护首选项的详细信息,请参阅 配置 API 管理实例的服务更新设置

服务级别协议

Azure API 管理的服务级别协议(SLA)描述了服务的预期可用性。 它还描述了实现可用性预期必须满足的条件。 若要了解这些条件,请务必查看联机服务的服务级别协议 (SLA)

在多个可用性区域或区域中部署 API 管理实例时,SLA 中定义的运行时间百分比会增加。

该服务提供自己的 SLA,但还需要考虑到其他工作负荷组件(例如 API 后端)的预期可靠性。