Azure SignalR 中的异地复制

寻求本地存在或需要强大的故障转移系统的公司通常选择跨多个 Azure 区域部署服务。 通过在 Azure SignalR 中集成异地复制,管理多区域方案变得容易得多。

使用异地复制的好处

  • 发生区域性服务中断时的复原能力更强:如果发生区域性服务中断,则会将 Azure SignalR DNS 解析为其他区域中的正常副本。
  • 跨区域通信。 不同的副本可以相互通信,就像是同一个实例一样。
  • 提高了网络速度:地理位置分散的客户端会连接到最近的副本。 这些副本通过 Azure 全球网络主干进行通信,确保网络快速稳定。
  • 共享配置。 所有副本都保留主 Azure SignalR 服务资源的配置。

先决条件

创建 SignalR 副本

若要创建副本,请导航到 Azure 门户上的 SignalR“副本”边栏选项卡,然后单击“添加”以创建副本。 副本在创建后会自动启用。

屏幕截图显示如何在门户上为 Azure SignalR 创建副本。

创建副本后,可以通过单击副本名称在门户上查看/编辑副本。

屏幕截图显示 Azure SignalR 副本资源的概述边栏选项卡。

注意

  • 副本计数目前限制为每个主资源最多 8 个。

定价和资源单元

每个副本都有其自己的 unitautoscale settings

副本是 Azure SignalR 服务的高级层的一项功能。 每个副本根据其自己的单元和出站流量单独计费。 免费消息配额也是单独计算的。

跨区域出站流量将收取出口费用。 如果消息跨副本传输并且在传输后成功发送到客户端或服务器,则该消息将按出站消息计费。

删除副本

为 Azure SignalR 服务创建副本后,如果不再需要它,可以随时将其删除。

若要在 Azure 门户中删除副本:

  1. 导航到 Azure SignalR 服务,然后选择“副本”边栏选项卡。 单击要删除的副本。
  2. 单击副本概述边栏选项卡上的“删除”按钮。

了解 SignalR 副本的工作原理

下图简要说明了 SignalR 副本的功能:

Azure SignalR 副本体系结构图。

  1. 客户端与应用服务器协商,并接收到一个目标为 Azure SignalR 服务的重定向。 然后,它解析 SignalR 服务的完全限定的域名 (FQDN) - contoso.signalr.azure.cn。 此 FQDN 指向流量管理器,该管理器返回最近的区域 SignalR 实例的规范名称 (CNAME)。
  2. 使用此 CNAME,客户端建立与区域实例(副本)的连接。
  3. 这两个副本会相互同步数据。 必要时,发送到一个副本的消息会被传输到其他副本。
  4. 如果副本未通过流量管理器 (TM) 执行的运行状况检查,TM 会从域解析过程中排除失败实例的终结点。 有关详细信息,请参阅下面的复原能力和灾难恢复

注意

  • 在数据平面中,主 Azure SignalR 资源的功能与其副本相同

复原能力和灾难恢复

Azure SignalR 服务利用流量管理器对其副本进行运行状况检查和 DNS 解析。 正常情况下,当所有副本都正常运行时,客户端会被定向到最近的副本。 例如:

  • 靠近 chinaeast2 的客户端会被定向到 chinaeast2 中的副本。
  • 同样,靠近 chinanorth2 的客户端会被定向到 chinanorth2 中的副本。

如果 chinaeast2 发生区域性服务中断(如下所示),流量管理器会检测到该区域的运行状况检查失败。 然后,该故障副本的 DNS 就会被从流量管理器的 DNS 解析结果中排除。 在设置为 90 秒的 DNS 生存时间 (TTL) 过后,chinaeast2 中的客户端会被重定向以与 chinanorth2 中的副本连接。

Azure SignalR 副本故障转移图。

一旦 chinaeast2 中的问题得到解决并且该区域重新联机,运行状况检查就会成功。 然后,chinaeast2 中的客户端会再次被定向到其区域中的副本。 此转换是平稳的,因为在关闭这些现有连接之前,连接的客户端不会受到影响。

Azure SignalR 副本故障转移恢复图。

此故障转移和恢复过程是自动的,不需要手动干预。

服务器连接的故障转移和恢复工作方式与客户端连接的相同。

注意

  • 此故障转移机制适用于 Azure SignalR 服务。 应用服务器的区域性中断的内容超出了本文档的范围。

添加副本后对性能的影响

启用副本后,客户端会自然地根据地理位置进行数据分配。 虽然 SignalR 负责在这些副本之间同步数据,但我们会很高兴地告诉你,对于大多数常见用例而言,服务器负载的相关开销很小。

具体来说,如果应用程序通常向较大的组(大小 > 10)或单个连接进行广播,则同步对性能的影响几乎看不到。 如果向小的组(大小 < 10)或单个用户发送消息,你可能会注意到同步开销会多一点。

为了确保有效的故障转移管理,建议设置每个副本的单元大小以处理所有流量。 也可以启用自动缩放来管理它。

有关更多性能评估,请参阅性能