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

Azure SignalR 中的异地复制

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

使用异地复制的好处

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

先决条件

示例用例

Contoso 是一家社交媒体公司,其客户群遍布美国和加拿大。 为了服务这些客户并让其相互通信,Contoso 在美国中部运行其服务。 Azure SignalR 服务用于处理用户连接并促进用户之间的通信。 Contoso 的最终用户大多是电话用户。 由于地理距离较长,加拿大的最终用户可能会遇到高延迟和网络质量差的情况。

此图显示如何使用一个 Azure SignalR 实例处理来自两个国家/地区的流量。

在异地复制功能问世之前,Contoso 可以在加拿大中部设置另一个 Azure SignalR 服务来服务其加拿大用户。 现在可以通过设置地理位置更近的 Azure SignalR 服务,让最终用户获得更好的网络质量和更低的延迟。

但是,管理多个 Azure SignalR 服务会带来一些挑战:

  1. 需要跨区域通信机制来实现加拿大用户和美国用户之间的对话。
  2. 开发团队需要管理两个单独的 Azure SignalR 服务,每个服务都有不同的域和连接字符串。
  3. 如果发生区域性中断,则需将流量切换到另一区域。

此图显示如何使用两个 Azure SignalR 实例处理来自两个国家/地区的流量。

利用异地复制

借助新的异地复制功能,Contoso 现在可以在加拿大中部建立副本,从而有效地克服上述障碍。

此图显示如何使用一个带副本的 Azure SignalR 实例处理来自两个国家/地区的流量。

创建 SignalR 副本

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

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

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

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

定价和资源单元

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

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

在前面的示例中,Contoso 在加拿大中部添加了一个副本。 Contoso 将根据其单位和消息在高级价格中支付加拿大中部的副本费用。

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

删除副本

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

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

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

了解 SignalR 副本的工作原理

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

Azure SignalR 副本体系结构图。

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

注意

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

复原能力和灾难恢复

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

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

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

Azure SignalR 副本故障转移图。

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

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

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

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

注意

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

禁用或启用副本终结点

设置副本时,可选择启用或禁用其终结点。 如果禁用,则主要 FQDN 的 DNS 解析不包括副本,因此不会将流量定向到该副本。

Azure SignalR 副本终结点设置图。

还可在创建终结点后启用“禁用终结点”。 在主资源的副本边栏选项卡上,单击副本右侧的省略号按钮,然后选择“启用终结点”或“禁用终结点”

Azure SignalR 副本终结点修改图。

删除复制之前,请考虑先禁用其终结点。 随着时间的推移,现有连接将断开连接。 由于没有新的连接,因此复制最终会处于空闲状态。 这可确保无缝的删除过程。

此功能还可用于排查区域问题。

注意

  • 由于 DNS 缓存,DNS 更新可能需要几分钟才能生效。
  • 现有连接在断开连接之前不会受到影响。

添加副本后对性能的影响

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

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

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

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