Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure 服务总线是一项完全托管的企业消息代理服务,它提供可靠的异步消息传送功能来分离应用程序和服务。 服务总线支持用于点到点通信的队列,以及用于发布-订阅消息传送模式的主题和订阅。 该服务提供内置可靠性功能,包括消息持久性、至少一次传递保证和死信队列来处理失败的消息处理。
使用 Azure 时, 可靠性是共同的责任。 Azure 提供了一系列支持复原和恢复的功能。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。
本文介绍如何增强服务总线的弹性,以应对各种可能的中断和问题,包括瞬时故障、可用性区域中断和区域中断。 它还重点介绍了有关服务总线服务级别协议(SLA)的一些关键信息。
生产部署建议
Azure Well-Architected Framework 提供了关于可靠性、性能、安全性、成本和操作的建议。 若要了解这些领域如何相互影响,并为可靠的 Azure 服务总线解决方案做出贡献,请参阅 服务总线的体系结构最佳做法。
可靠性体系结构概述
本部分介绍从可靠性的角度来看,服务工作原理最相关的一些重要方面。 本部分介绍逻辑体系结构,其中包括部署和使用的某些资源和功能。 它还讨论了物理架构,该架构提供了服务内部运作方式的详细信息。
逻辑体系结构
命名空间充当服务总线的管理容器,可配置为使用基本层、标准层或高级层。 在命名空间级别配置服务时,您可以通过分配容量、配置网络安全以及启用地理灾难恢复来完成。
在命名空间中,部署队列和主题,这些 队列 和 主题是具有不同语义的消息传送实体。 有关详细信息,请参阅服务总线队列、主题和订阅。
可以选择在命名空间上配置 分区 ,该分区将队列和主题分散到多个消息中转站和消息存储中。 命名空间可以使用多个分区来处理并行处理和水平缩放。 服务总线仅保证单个分区内的排序。 分区在应用程序的可靠性设计中起着关键作用。 设计应用程序时,在最大化可用性和一致性之间进行权衡。 对于高级层, 在命名空间上启用分区。 对于“基本”和“标准”层命名空间,请在实体上配置分区,并在 发送消息时(可选)配置分区。
可以使用服务总线及其异步设计方法来提高应用程序的可用性。 有关详细信息,请参阅 异步消息传送模式和高可用性。
物理体系结构
服务总线提供基础计算和存储资源。 对于每个命名空间,多个 消息中转站 处理消息,多个 消息存储 存储消息。 每个消息存储都有三个副本:一个主副本和两个辅助副本。 服务总线使所有这三个副本保持同步,以用于数据和管理操作。 如果主复制副本故障,服务总线会将辅助副本升级为主副本,这样不会对客户端造成停机影响。
对于使用“基本”或“标准”层的命名空间,服务总线通过共享的多租户基础结构提供冗余,该基础结构可在可用可用性区域中自动复制消息。 该服务维护多个消息存储,并将所有副本保持同步,以实现数据和管理操作。
对于 高级层命名空间,服务总线提供具有专用 CPU 和内存资源的专用消息传输单元(MU)。 高级层命名空间可以根据工作负荷需求自动缩放。 有关详细信息,请参阅自动更新服务总线命名空间的 MU。
服务总线基础结构跨多个物理计算机和机架,这些计算机和机架分布在容错域中,从而降低影响命名空间的灾难性故障的风险。 在具有可用性区域的区域中,基础结构 跨不同的物理数据中心扩展。 该服务实现透明故障检测和故障转移机制,以便它在保证服务级别内继续运行,通常不会在这些故障发生时明显中断。
暂时性故障的复原能力
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。
与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅 处理暂时性故障的建议。
服务总线 SDK 包括自动重试逻辑,针对由于网络超时或临时服务不可用等暂时性条件而失败的操作,该逻辑会使用指数递增的退避策略进行重试。 当应用程序遇到与服务总线的暂时性断开连接时,SDK 会使用配置的重试策略自动尝试重新连接。
若要优化应用程序中的暂时性故障处理,请使用最新的服务总线 SDK,其中包括最新的重试逻辑和连接管理功能。 有关详细信息,请参阅 适用于 .NET 的服务总线客户端库。
应对可用区故障的弹性
可用性区域 是 Azure 区域内物理上独立的数据中心组。 当某个区域发生故障时,服务可以切换到其他可用的区域。
服务总线支持所有服务层级的区域冗余部署。 在受支持的区域中创建服务总线命名空间时,会自动启用区域冗余,无需额外付费。 区域冗余部署模型适用于所有服务总线功能,包括分区和会话。
服务总线以透明方式跨区域中的多个可用性区域复制配置、元数据和消息数据。 区域冗余提供自动故障转移,无需你的任何干预。 所有服务总线组件(包括计算、网络和存储)都会跨区域复制。 服务总线拥有足够的容量储备,可以立即应对区域完全丢失的情况。 即使整个可用性区域不可用,它仍继续运行,而不会丢失数据或中断消息应用程序。
要求
区域支持: 可以将区域冗余服务总线命名空间部署到 支持可用性区域的 Azure 区域。 在受支持的区域中创建命名空间时,服务总线会自动启用可用性区域支持,无需额外配置。
层: 所有服务总线层(基本、标准和高级)都支持可用性区域,无需额外的要求。
注意事项
服务总线命名空间包括一个 zoneRedundant 属性。 以前,此属性是启用可用性区域所必需的,但此要求已更改,并且 zoneRedundant 属性已弃用。 即使启用了区域冗余,此属性也会显示 false 。 具有可用性区域的区域中的所有命名空间都是区域冗余的。
成本
服务总线中的区域冗余不会增加额外的成本。
配置可用性区域支持
在 受支持的区域中部署服务总线命名空间时,服务总线命名空间会自动支持区域冗余。 无需进一步配置。
所有区域正常时的行为
本部分介绍在为区域冗余配置服务总线命名空间以及所有可用性区域正常运行时的预期情况。
区域之间的流量路由: 服务总线使用主动-主动模型,其中消息分布在多个可用性区域。 客户端连接会跨区域自动负载均衡,服务无论区域如何,都会将操作路由到可用的消息传送基础设施。
区域之间的数据复制: 服务总线跨可用性区域使用同步复制,包括元数据和消息数据。 消息存储的多个副本必须在服务认为它们已完成之前确认写入操作,这可确保在正常操作期间跨区域的数据一致性。
区域故障期间的行为
本节介绍在配置服务总线命名空间以实现区域冗余时以及出现可用性区域中断时,预计会出现什么情况。
- 检测和响应: Azure 会自动检测区域故障,并启动故障转移到正常区域。 区域级故障转移不需要客户采取任何行动。
- 通知: Azure 不会在区域关闭时自动通知你。 但是,可以使用 Azure 服务运行状况 来了解服务的总体运行状况,包括任何区域故障,并且可以设置 服务运行状况警报 来通知问题。
活动请求: 在区域故障期间,服务总线可能会删除活动请求。 如果客户在短时间内重试,以适当处理暂时性故障,通常可以避免重大影响。
预期数据丢失: 区域故障期间不会发生数据丢失,因为服务总线在确认之前同步跨区域复制消息。
预期的停机时间: 区域故障可能会导致几秒钟的停机时间。 如果客户在短时间内重试,以适当处理暂时性故障,通常可以避免重大影响。
流量重新路由: 服务总线会检测区域丢失情况,并自动将新请求重定向到一个正常的可用性区域中的另一个副本。
服务总线 SDK 通常以透明方式处理连接管理和重试逻辑。
区域恢复
当可用性区域恢复时,服务总线会自动将区域重新集成到活动服务拓扑中。 然后,恢复的区域将接受新的连接,并与其他区域一起处理消息。 在中断期间复制到幸存区域的数据保持不变,所有区域中的正常同步复制都会恢复。 无需采取措施进行区域恢复或重新集成。
测试区域故障
服务总线管理区域故障的流量路由、故障转移和区域恢复,因此无需验证可用性区域故障过程或提供进一步的输入。
对区域范围的故障的复原能力
服务总线提供两种类型的多区域支持,这两种支持都需要高级层命名空间:
- 元数据地理灾难恢复在主要区域和次要区域之间提供配置和元数据的主动-被动冗余,但不会复制消息内容。 请考虑对自行处理数据复制或不需要数据复制的应用程序使用 Geo-Disaster Recovery。
元数据 Geo-灾难恢复需要您手动启动次要区域的故障转移或提升,以成为新的主区域。 即使主要区域已关闭,Azure 也不会自动启动故障转移或升级。
基本层和标准层的命名空间不包括原生的多区域功能,但可以通过在跨区域之间使用多个命名空间来实现应用级复制模式。 有关详细信息,请参阅 用于复原的自定义多区域解决方案。
元数据地理灾难恢复
高级层支持元数据地理灾难恢复。 此功能可改善灾难恢复方案,包括区域灾难性损失。 地理灾害恢复仅复制命名空间的配置和元数据,并且不会复制消息数据。 为了支持灾难恢复,此功能可确保预配置另一个区域中的命名空间,并准备好立即接受来自客户端的消息。 异地灾难恢复是一种单向恢复解决方案,不支持故障恢复到之前的主要区域。
元数据地理灾难恢复非常适合那些不严格要求保留每条消息并且能容忍在灾难情况下出现一定数据丢失的应用程序。 元数据地理灾难恢复也可能适用于自行复制数据或无需数据复制的应用程序。 例如,如果消息包含稍后转换为缩略图的大型图像,如果可以快速恢复处理另一个区域中的新消息并稍后重新构造丢失的消息,则从失败的区域丢失某些消息可能是可以接受的。
重要
地灾恢复可实现具有相同配置但不复制消息数据的业务连续性。
当您配置元数据地理灾难恢复时,创建客户端应用程序要连接的别名。 别名是一个 FQDN,默认情况下将所有流量定向到主命名空间。
如果主要区域发生故障或发生其他类型的灾难,可以随时手动启动从主要区域到次要区域的单向故障转移。 可以执行 安全故障转移,这会在等待复制完成后再切换到次级副本。 在区域中断期间,此选项可能不可用。 故障转移启动后,它几乎会立即完成。 在故障转移过程中,异地灾难恢复别名会重新指向辅助命名空间,且配对关系会被移除。
本章节总结了地质灾害恢复的重要方面。 查看完整的文档,了解其工作原理。 有关详细信息,请参阅 服务总线地理灾难恢复。
要求
区域支持: 可以选择支持服务总线作为主要命名空间或辅助命名空间的任何 Azure 区域。 无需使用 Azure 配对区域,因此请根据延迟、符合性或数据驻留要求选择次要区域。
层: 若要启用元数据地理灾难恢复,这两个命名空间都必须使用高级层。
分区: 无法将分区命名空间与非分区命名空间配对。
元数据 Geo-Disaster Recovery: 无法将命名空间配置为同时使用 Geo-Replication 和 Geo-Disaster Recovery。
注意事项
角色分配: Microsoft Entra 主命名空间中实体的基于角色的访问控制(RBAC)分配不会复制到辅助命名空间。 在辅助命名空间中手动创建角色分配,以保护对这些实体的访问。
应用程序设计: 在设计客户端应用程序时,地理灾难恢复需要具体的注意事项。 有关详细信息,请参阅 注意事项。
专用终结点: 如果使用专用终结点连接到命名空间,请在主要区域和次要区域中配置网络。 有关详细信息,请参阅专用终结点。
从标准版迁移到高级版的命名空间: 如果命名空间位于标准层中,并且将其迁移到高级层,则必须以不同的方式处理别名。 有关详细信息,请参阅 服务总线标准版到高级版。
成本
启用元数据地理灾害恢复功能时,您需要为主命名空间和辅助命名空间付费。
配置多区域支持
创建元数据 Geo-Disaster Recovery 配对。 若要在主要命名空间和辅助命名空间之间配置灾难恢复,请参阅 设置和故障转移流。
关闭元数据 Geo-灾难恢复。 若要中断命名空间之间的配对,请参阅 设置和故障转移流程。
容量计划和管理
规划多区域部署时,如果一个区域发生故障,请确保这两个区域有足够的容量来处理完整负载。 次要区域在正常运行期间保持被动状态,但故障转移后必须立即处理流量。 规划如何缩放辅助命名空间容量,以便它可以不延迟地接收生产流量。 如果在故障转移过程中可以容忍额外的停机时间,则可以在故障转移期间或故障转移后缩放辅助命名空间容量。 若要减少停机时间,请提前在辅助命名空间中预配容量,使其仍可接收生产负载。
当所有区域都正常时的行为
本部分介绍了当服务总线命名空间配置为地理灾难恢复且主要区域正常运行时的预期情况。
区域之间的流量路由: 客户端应用程序通过命名空间的地理灾难恢复(Geo-Disaster Recovery)别名进行连接,流量路由到主要区域中的主命名空间。
在正常作期间,只有主命名空间主动处理来自客户端的消息。 辅助命名空间保持待机模式,访问数据的任何请求都失败。
区域之间的数据复制: 仅配置元数据在命名空间之间复制。 配置复制持续且异步。
所有消息数据仅保留在主命名空间中,不会复制到辅助命名空间。
区域中断期间的行为
本节内容描述了在将服务总线命名空间配置为地理灾难恢复时,以及主要区域发生中断时的预期情况。
检测和响应: 你负责监视区域运行状况并手动启动故障转移。 即使主要区域关闭,Azure 也不会自动启动故障转移或升级次要区域。
有关如何启动故障转移的详细信息,请参阅 故障转移流。
启动故障转移时,选择是执行 安全故障转移 还是 标准故障转移,例如强制故障转移还是手动故障转移。 在故障转移开始之前,安全的故障转移会等待复制完成到次要区域。 此方法可减少元数据丢失,但会导致停机。 安全故障转移要求命名空间位于同一 Azure 订阅中。
在主要区域发生中断时,通常必须执行强制故障转移。 如果主要区域可用,而你出于其他原因触发故障转移,则可以选择计划故障转移。
故障转移是单向操作,因此之后必须重新建立地理灾难恢复配对。 有关详细信息,请参阅 区域恢复。
- 通知: Azure 不会在某个区域关闭时自动通知你。 但是,可以使用 Azure 服务运行状况 来了解服务的总体运行状况,包括任何区域故障,并且可以设置 服务运行状况警报 来通知问题。
活动请求: 在故障转移启动时,正在进行的活动请求将终止。 客户端应用程序应在故障转移完成后重试操作。
预期数据丢失:
元数据: 配置和元数据通常复制到辅助命名空间。 元数据复制以异步方式进行,因此最近的更改可能不会复制,尤其是复杂的更改。 在客户端访问辅助命名空间之前验证辅助命名空间的配置。
消息数据: 消息数据不会在区域之间复制。 如果主要区域出现故障,则主命名空间中的消息将变为不可用。
除非灾难性灾难导致主要区域完全丢失,否则消息不会永久丢失。 如果区域恢复,则可以稍后从主命名空间检索消息。
预计停机时间:故障转移通常在 5 到 10 分钟内完成。 客户端可能需要更长的时间才能完全复制和更新 DNS 条目。
流量重新路由: 使用 Geo-Disaster Recovery 别名连接到命名空间的客户端会在故障转移后自动重定向到辅助命名空间。 但是,此重定向取决于 DNS 服务器是否如实遵循命名空间 DNS 记录的 TTL,以及客户端接收到这些已更新的 DNS 记录。
区域恢复
原始主要区域恢复后,必须手动重新建立配对连接并可选择性地执行故障回切。 创建一个新的地理灾难恢复配对,将恢复的区域设为次要区域,然后执行故障转移以返回到原始区域。 此过程涉及发送到临时主命名空间的消息的潜在数据丢失。
如果灾难导致主要区域中所有区域丢失,则可能无法恢复数据。 在其他场景中,从故障转移前保留在主命名空间中的消息数据是可恢复的。 还原访问后,可以从旧的主命名空间获取历史消息。 你负责配置应用程序以接收和处理这些消息。 Azure 不会自动将其还原到次要区域。
针对区域故障进行测试
为了测试你的响应和灾难恢复过程,请在维护窗口期期间执行计划性故障转移。 启动从主命名空间到辅助命名空间的故障转移,并验证应用程序是否可以连接和处理来自新主命名空间的消息。
监视故障转移的持续时间,并验证运行手册和自动化程序是否正常运作。 测试后,可以将系统切回到原始配置。
了解故障转移过程中及故障转移后可能遇到的潜在停机时间和数据丢失情况。 在一个反映生产命名空间配置的非生产环境中,测试元数据的地理灾难恢复。
用于复原的自定义多区域解决方案
Geo-Replication 和 Geo-Disaster Recovery 提供应对区域中断和其他问题的恢复能力,并且适用于大多数工作负荷。 在以下情况下,这些功能可能不符合你的需求:
你对自定义复制或同时维护多个活动区域有要求。
使用不支持这些功能的服务总线层。
有多种设计模式在服务总线中提供不同类型的多区域支持。 其中许多模式要求部署多个命名空间,并配置应用程序以适当地使用它们。 有关详细信息,请参阅以下资源:
服务维护期间的系统弹性能力
服务总线会定期维护。 在计划内维护期间,命名空间将移动到包含最新更新的冗余节点。 在移动期间,客户端 SDK 断开连接,然后自动重新连接到命名空间。 升级通常在 30 秒内完成。 应用程序必须做好准备,以应对在维护期间可能发生的暂时性网络断开连接。
有关详细信息,请参阅 服务总线的 Azure 维护事件。
备份和还原
服务总线不是为长期数据存储设计的。 数据通常仅在短时间内存储在主题或队列中。 然后,它将处理或保存到另一个数据存储系统中,然后将其删除。 由于此设计,服务总线会自动维护消息数据的副本,但不为该数据提供任何备份和还原功能。
对于需要长期消息保留的方案,请考虑实现到 Azure 存储或其他持久存储服务的应用程序级存档。
服务级别协议
Azure 服务的服务级别协议 (SLA) 描述了每个服务的预期可用性,以及解决方案为实现该可用性预期而必须满足的条件。 有关详细信息,请参阅 联机服务的 SLA。
服务总线为所有命名空间提供 SLA(服务水平协议)。 当命名空间满足以下条件时,可用性 SLA 更高:
- 它使用的是高级层。
- 它位于具有可用性区域的区域中。
- 它使用分区。