Azure SignalR 中的异地复制
寻求本地存在或需要强大的故障转移系统的公司通常选择跨多个 Azure 区域部署服务。 通过在 Azure SignalR 中集成异地复制,管理多区域方案变得容易得多。
使用异地复制的好处
- 发生区域性服务中断时的复原能力更强:如果发生区域性服务中断,则会将 Azure SignalR DNS 解析为其他区域中的正常副本。
- 跨区域通信。 不同的副本可以相互通信,就像是同一个实例一样。
- 提高了网络速度:地理位置分散的客户端会连接到最近的副本。 这些副本通过 Azure 全球网络主干进行通信,确保网络快速稳定。
- 共享配置。 所有副本都保留主 Azure SignalR 服务资源的配置。
先决条件
- 高级层中的 Azure SignalR 服务。
创建 SignalR 副本
若要创建副本,请导航到 Azure 门户上的 SignalR“副本”边栏选项卡,然后单击“添加”以创建副本。 副本在创建后会自动启用。
创建副本后,可以通过单击副本名称在门户上查看/编辑副本。
注意
- 副本计数目前限制为每个主资源最多 8 个。
定价和资源单元
每个副本都有其自己的 unit
和 autoscale settings
。
副本是 Azure SignalR 服务的高级层的一项功能。 每个副本根据其自己的单元和出站流量单独计费。 免费消息配额也是单独计算的。
跨区域出站流量将收取出口费用。 如果消息跨副本传输并且在传输后成功发送到客户端或服务器,则该消息将按出站消息计费。
删除副本
为 Azure SignalR 服务创建副本后,如果不再需要它,可以随时将其删除。
若要在 Azure 门户中删除副本:
- 导航到 Azure SignalR 服务,然后选择“副本”边栏选项卡。 单击要删除的副本。
- 单击副本概述边栏选项卡上的“删除”按钮。
了解 SignalR 副本的工作原理
下图简要说明了 SignalR 副本的功能:
- 客户端与应用服务器协商,并接收到一个目标为 Azure SignalR 服务的重定向。 然后,它解析 SignalR 服务的完全限定的域名 (FQDN) -
contoso.signalr.azure.cn
。 此 FQDN 指向流量管理器,该管理器返回最近的区域 SignalR 实例的规范名称 (CNAME)。 - 使用此 CNAME,客户端建立与区域实例(副本)的连接。
- 这两个副本会相互同步数据。 必要时,发送到一个副本的消息会被传输到其他副本。
- 如果副本未通过流量管理器 (TM) 执行的运行状况检查,TM 会从域解析过程中排除失败实例的终结点。 有关详细信息,请参阅下面的复原能力和灾难恢复
注意
- 在数据平面中,主 Azure SignalR 资源的功能与其副本相同
复原能力和灾难恢复
Azure SignalR 服务利用流量管理器对其副本进行运行状况检查和 DNS 解析。 正常情况下,当所有副本都正常运行时,客户端会被定向到最近的副本。 例如:
- 靠近
chinaeast2
的客户端会被定向到chinaeast2
中的副本。 - 同样,靠近
chinanorth2
的客户端会被定向到chinanorth2
中的副本。
如果 chinaeast2 发生区域性服务中断(如下所示),流量管理器会检测到该区域的运行状况检查失败。 然后,该故障副本的 DNS 就会被从流量管理器的 DNS 解析结果中排除。 在设置为 90 秒的 DNS 生存时间 (TTL) 过后,chinaeast2
中的客户端会被重定向以与 chinanorth2
中的副本连接。
一旦 chinaeast2
中的问题得到解决并且该区域重新联机,运行状况检查就会成功。 然后,chinaeast2
中的客户端会再次被定向到其区域中的副本。 此转换是平稳的,因为在关闭这些现有连接之前,连接的客户端不会受到影响。
此故障转移和恢复过程是自动的,不需要手动干预。
服务器连接的故障转移和恢复工作方式与客户端连接的相同。
注意
- 此故障转移机制适用于 Azure SignalR 服务。 应用服务器的区域性中断的内容超出了本文档的范围。
添加副本后对性能的影响
启用副本后,客户端会自然地根据地理位置进行数据分配。 虽然 SignalR 负责在这些副本之间同步数据,但我们会很高兴地告诉你,对于大多数常见用例而言,服务器负载的相关开销很小。
具体来说,如果应用程序通常向较大的组(大小 > 10)或单个连接进行广播,则同步对性能的影响几乎看不到。 如果向小的组(大小 < 10)或单个用户发送消息,你可能会注意到同步开销会多一点。
为了确保有效的故障转移管理,建议设置每个副本的单元大小以处理所有流量。 也可以启用自动缩放来管理它。
有关更多性能评估,请参阅性能。