Azure Web PubSub服务的可靠性

Azure Web PubSub服务是一种完全托管的实时消息传送服务,它通过使用 WebSocket 协议在服务器和客户端之间实现双向通信。 单个 Web PubSub 资源可以扩展到 100 万个并发 WebSocket 连接。 该服务支持多种消息传送模式,包括服务器到客户端广播、将消息传送到命名组、客户端到客户端发布/订阅和 AI 令牌流式传输。

使用 Azure 时,可靠性是共同的责任。 Azure 提供了一系列支持复原和恢复的功能。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。

本文介绍如何使 Azure Web PubSub 服务能够应对各种潜在的中断和问题,包括瞬时故障、可用区故障以及整个区域范围的故障。 它还介绍了服务如何处理维护和突出显示有关Azure Web PubSub服务服务级别协议(SLA)的关键信息。

提高可靠性的生产部署建议

对于生产工作负荷,请遵循以下建议:

  • 使用高级版本。 高级层能够抵御受支持区域的可用区故障,并允许你配置异地复制。
  • 在生成客户端应用程序时使用Azure Web PubSub客户端 SDK,或通过安全重新连接遵循暂时性故障处理指南。 区域故障转移、区域故障转移和暂时性故障都会删除活动连接。
  • 启用异地复制以防止区域范围的故障。 为每个副本分配足够的容量,以应对故障转移事件期间预计的全部流量负载。

可靠性体系结构概述

本部分介绍从可靠性的角度来看,服务工作原理最相关的一些重要方面。 本部分介绍逻辑体系结构,其中包括部署和使用的某些资源和功能。 它还讨论了物理架构,该架构提供了服务内部运作方式的详细信息。

逻辑体系结构

你创建的资源是 Web PubSub 资源。 配置包含多个单位的资源,这些 单位表示资源的容量,包括最大并发连接数。 有关详细信息,请参阅Azure Web PubSub服务的性能指南

Web PubSub 资源具有一个类似于 contoso.webpubsub.azure.com 的全局唯一终结点。 客户端建立到此终结点的 WebSocket 连接。 应用程序服务器连接到同一终结点,以从客户端发送消息和接收事件。

有关详细信息,请参阅Azure Web PubSub 服务内部原理

物理体系结构

Azure Web PubSub服务跨一组计算资源管理 WebSocket 连接状态和消息路由。 Azure管理底层基础结构。 不会直接看到或与服务使用的各个 VM 或其他基础结构组件进行交互。

暂时性故障的复原能力

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

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

WebSocket 是一种长期连接协议。 暂时性网络事件、后端基础结构重启和服务维护操作可能会断开活动连接。 简单的重新连接可以恢复连接,但如果没有额外的处理逻辑,客户端会丢失在中断期间仍在传输中或排队等待的消息。

Azure Web PubSub服务通过位于原始 WebSocket 连接之上的可靠子协议解决了此问题。 子协议跟踪消息序列和连接状态,以便当连接断开时,客户端会重新协商服务并从其离开的位置恢复。

连接断开并重新连接后,通常不会丢失消息。 但是,在某些情况下,可能会发生消息丢失。 例如,如果客户端断开连接超过一分钟,然后使用同一连接 ID 重新连接,则重新连接操作会显示失败状态以指示消息丢失可能发生。

若要利用可靠的子协议,请遵循以下建议:

应对可用区故障的弹性

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

使用高级层时,Azure Web PubSub服务支持区域冗余部署。 在支持可用性区域的区域中创建或升级高级层 Web PubSub 资源时,会自动启用区域冗余。 该服务在区域中的多个可用性区域之间分配其基础结构。 如果一个区域发生故障,服务会将流量路由到正常区域中的基础结构。

显示跨多个可用性区域部署的区域冗余 Azure Web PubSub 服务的示意图。

Requirements

  • 区域支持: 大多数区域都支持区域冗余,其中这两个条件都适用:

  • 层: 高级层提供区域冗余。

Cost

区域冗余不会增加成本,你支付标准高级层费率。 有关详细信息,请参阅Azure Web PubSub服务定价

配置可用性区域支持

除了选择高级层之外,区域冗余不需要任何配置。 这两种情况下会自动启用它:

  • 创建新的区域冗余 Web PubSub 资源。 创建资源时,请选择高级层 SKU。 有关详细信息,请参阅创建Azure Web PubSub资源

  • 将现有资源升级到高级层。 将现有资源升级到高级层 SKU 时,会自动启用区域冗余。 从标准升级到高级不会导致服务停机。 有关详细信息,请参阅缩放Azure Web PubSub服务实例

所有区域正常时的行为

本节介绍将 Azure Web PubSub 资源配置为区域冗余且所有可用区均正常运行时的预期情况。

  • 跨区域操作:Azure Web PubSub服务自动管理连接和操作跨可用性区域分布的方式。 多个区域中的基础结构处理主动-主动模型中的流量。 你不需要进行任何配置即可利用这种行为。 服务自动跨区域路由实例之间的消息,因此,一个区域中的客户端发送的消息将传递到任何其他区域中连接的客户端。

  • 跨区域数据复制:Azure Web PubSub服务不会保留客户数据。 该服务会维护会话元数据,例如活动连接的连接状态和消息序列信息。 此元数据跨可用性区域同步复制。

区域故障期间的行为

本部分介绍了将 Azure Web PubSub 资源配置为区域冗余时,如果其中一个可用性区域发生故障,你可以预期的情况。

  • 检测和响应:Azure Web PubSub服务平台负责检测可用性区域中的故障。 无需执行任何操作即可启动区域故障转移。
  • 活动请求: 在区域故障期间,将删除与受影响区域中基础结构的活动 WebSocket 连接。 如果客户端适当地处理 暂时性故障 ,例如在短时间内重新连接,它们通常会避免产生重大影响。

  • 预期数据丢失:Azure Web PubSub服务不会保留消息,因此区域故障不应导致Azure Web PubSub服务内数据丢失。 但是,在区域关闭事件期间会删除任何活动连接,因此主动传输的任何数据都可能会丢失。

    如果发布者使用Azure Web PubSub客户端 SDK 或实现可靠的子协议,则服务收到消息后,服务会确认其消息。 确认消息后,会跨所有可用性区域复制该消息,因此发布者的区域失败不会导致消息丢失。 但是,如果订阅者在删除消息之前未收到消息,则可能不会收到该消息。

  • 预期的停机时间: 删除的活动连接重新连接通常需要几秒钟时间。 实现重新连接逻辑的客户端会经历最少的中断。

  • 重新分发:Azure Web PubSub服务检测到区域丢失,并自动在正常区域中重新分发流量。 你不必执行任何操作。

区域恢复

当可用性区域恢复时,Azure Web PubSub服务会自动将其重新集成到活动服务拓扑中。 您无需对区域恢复执行任何操作。

区域恢复后,新连接可能会定向到恢复区域中的基础结构。 任何现有的连接都不会被转移或重新均衡到恢复区域,但随着这些连接随时间断开和重新连接,它们将逐渐被重新均衡。 跨区域的连接不平衡对工作负荷没有任何影响。

测试区域故障

Azure Web PubSub服务会自动管理区域冗余高级层资源的流量路由、故障转移和区域恢复。 你不需要开始任何事情。 由于区域冗余是完全托管的,因此无需验证可用区故障处理流程。

对区域范围的故障的复原能力

Azure Web PubSub服务是单区域服务。 如果区域变得不可用,则 Web PubSub 资源也不可用。

若要保护应用程序免受区域范围的故障的影响,可以使用高级层中提供的 异地复制。 或者,可以通过在不同的区域中部署多个 Web PubSub 资源来生成自定义多区域解决方案。

Geo-replication

异地复制可让你在其他 Azure 区域中为 Web PubSub 资源添加副本。 所有副本共享单个终结点(contoso.webpubsub.azure.com)。 在此终结点后面,Azure 流量管理器使用基于 DNS 的路由将每个客户端定向到最接近正常的区域副本。 如果某个区域失败,流量管理器会通过运行状况检查检测失败,并停止将客户端定向到该副本。 新的客户端连接会自动路由到最接近的正常副本。

展示 Azure Web PubSub 配置为跨两个区域进行地域复制的示意图。

创建 Web PubSub 资源时所在的区域称为 主区域,其副本称为 主副本。 主资源的控制平面负责管理 Web PubSub 资源的配置。

Requirements

  • 区域支持:可以在Azure Web PubSub服务可用的任何区域中添加副本。
  • 层: 必须使用高级层来启用异地复制。
  • 副本限制: 每个主 Web PubSub 资源最多支持 8 个副本。

Considerations

  • 配置继承: 副本从主要资源继承大多数配置设置。 必须在每个副本上单独配置某些设置。 有关未继承的设置的完整列表,请参阅Azure Web PubSub中的异地复制

  • 配置更改: 主要区域中的主要控制平面处理对 Web PubSub 资源的任何配置更改。 如果主控制平面不可用,则无法更新资源配置,但现有副本将继续处理数据流量,而不会中断。

Cost

每个副本单独计费,基于其自身的单位数量和发出的消息量。 如果在副本之间传输消息,然后传递到另一区域中的客户端或服务器,则会将其计费为出站消息。 有关详细信息,请参阅Azure Web PubSub服务定价

配置异地复制

若要向 Web PubSub 资源添加或删除副本,请参阅Azure Web PubSub中的异地复制

容量计划和管理

每个副本独立处理流量。 在区域故障转移期间,来自失败区域的客户端重新连接到最近的正常副本。 为了确保幸存的副本具有足够的容量来应对额外的负载,请为每个副本配置可以处理工作负荷全部预期流量的单元,而不仅是它通常处理的部分。

或者,在每个副本上启用自动缩放,以便单位可以自动横向扩展以响应更高的负载。 当辅助副本不可用时,自动缩放将继续工作,但如果主控制平面不可用,则自动缩放不起作用。 有关自动缩放的详细信息,请参阅自动缩放 Azure Web PubSub 服务的单元

有关过度预配作为策略的一般指导,请参阅 通过过度预配管理容量

当所有区域都正常时的行为

本节介绍了将 Azure Web PubSub 服务配置为进行异地复制且所有区域均正常运行时可以预期的情况。

  • Cross-region operation: Azure 流量管理器将每个客户端路由到最近的健康区域副本。 不同地理区域中的客户端可能会连接到不同的副本。 Web PubSub 服务跨副本同步消息,以便连接到任何副本的客户端可以相互通信。

  • 跨区域数据复制: 将消息发送到副本时,服务会将该消息同步传输到其他副本,以便连接到其他位置的客户端可以接收该消息。 对于最常见的消息模式,同步开销很小,例如向大型组广播或向单个连接发送消息。 向小组(少于 10 个成员)发送消息可能会导致同步开销略有增加。

    Azure Web PubSub 服务不会持久保留消息;只有正在进行的消息传递才会在各个副本之间同步。

区域故障期间的行为

本节介绍将 Azure Web PubSub 服务配置为进行异地复制,且其中一个副本区域发生中断时,预期会出现的情况。

  • 检测和响应: Web PubSub 服务负责检测区域中的故障,并自动将传入的流量重新路由到你配置的其他区域之一的副本。
  • 活动请求: 与发生故障区域中的副本建立的活动 WebSocket 连接会被断开。 在副本故障转移后,客户端必须重新连接。

  • 预期的数据丢失:Azure Web PubSub服务不会保留消息。 在发生故障时传输到失败区域中的客户端的消息可能会丢失。 由于服务不存储客户数据,因此不会造成永久性数据丢失。

  • 预期停机时间: Azure 流量管理器 针对每个副本执行运行状况检查。 当区域中断导致副本运行状况检查失败时,流量管理器会从其 DNS 解析结果中删除该副本的终结点。 删除终结点后,在客户端看到更新的 DNS 记录之前,DNS TTL 必须经过 90 秒。 总共,转换通常需要几分钟时间。 在重新连接到正常副本后,实现重新连接逻辑的精心设计的客户端可以恢复正常操作。

    如果主控制平面不可用,则无法对 Web PubSub 资源或其副本的配置进行任何更改。 但是,WebSocket 连接在健康的副本中仍可正常工作。

  • Redistribution: Azure 流量管理器将传入请求定向到正常运行的副本。 但是,如果客户端在Azure 流量管理器检测到副本故障转移并且更新的DNS条目尚未传播到客户端之前尝试重新连接,则客户端的重新连接尝试可能会继续面向不可用的区域,并且可能会失败。

    DNS 更新传播后,重新连接客户端会自动路由到最近的正常副本。

区域恢复

故障区域恢复时,Traffic Manager 健康检查会检测到已恢复的副本,并将其端点重新纳入 DNS 解析中。 当前连接到其他副本的客户端不会受到影响,并且一直保持连接,直到它们断开连接。 当新连接是最接近正常的副本时,再次路由到恢复区域的副本。

针对区域故障进行测试

若要模拟区域故障转移并测试客户端应用程序的重新连接行为,可以禁用副本的终结点。 此操作会导致流量管理器停止将流量路由到该副本,这样就可以观察客户端连接到的副本变得不可用时客户端的行为方式。 有关详细步骤,请参阅 “禁用”或“启用副本终结点”。

用于复原的自定义多区域解决方案

如果需要跨区域复原但未使用异地复制,可以在多个区域中部署和管理单独的 Web PubSub 资源,并在应用程序服务器中实现自己的故障转移逻辑。 此方法比异地复制更为复杂,不支持客户端到客户端连接的零停机时间故障转移。 有关详细的体系结构概述、故障转移模式和测试指南,请参阅 Azure Web PubSub 服务中的复原能力和灾难恢复

备份和还原

Azure Web PubSub服务是无状态消息传送服务。 它不会保留客户消息,并且没有备份或还原功能。

若要保护资源配置,请使用基础结构(如Bicep或 ARM 模板)定义 Web PubSub 资源,并将这些定义存储在源代码管理中。 如果需要重新创建资源,请从存储的配置重新部署它。

服务维护期间的系统弹性能力

Microsoft定期应用服务更新并执行其他维护。 Azure平台会自动处理这些活动,确保维护是无缝且透明的。 除非通过 Azure 服务运行状况 计划内维护 通知,否则在维护事件期间不会有停机。

服务级别协议

Azure服务的服务级别协议(SLA)描述了每个服务的预期可用性以及解决方案必须满足的条件,以实现该可用性预期。 有关详细信息,请参阅 联机服务的 SLA