你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure SignalR 中的异地复制
寻求本地存在或需要强大的故障转移系统的公司通常选择跨多个 Azure 区域部署服务。 通过在 Azure SignalR 中集成异地复制,管理多区域方案变得容易得多。
使用异地复制的好处
- 发生区域性服务中断时的复原能力更强:如果发生区域性服务中断,则会将 Azure SignalR DNS 解析为其他区域中的正常副本。
- 跨区域通信。 不同的副本可以相互通信,就像是同一个实例一样。
- 提高了网络速度:地理位置分散的客户端会连接到最近的副本。 这些副本通过 Azure 全球网络主干进行通信,确保网络快速稳定。
- 共享配置。 所有副本都保留主 Azure SignalR 服务资源的配置。
先决条件
- 高级层中的 Azure SignalR 服务。
示例用例
Contoso 是一家社交媒体公司,其客户群遍布美国和加拿大。 为了服务这些客户并让其相互通信,Contoso 在美国中部运行其服务。 Azure SignalR 服务用于处理用户连接并促进用户之间的通信。 Contoso 的最终用户大多是电话用户。 由于地理距离较长,加拿大的最终用户可能会遇到高延迟和网络质量差的情况。
在异地复制功能问世之前,Contoso 可以在加拿大中部设置另一个 Azure SignalR 服务来服务其加拿大用户。 现在可以通过设置地理位置更近的 Azure SignalR 服务,让最终用户获得更好的网络质量和更低的延迟。
但是,管理多个 Azure SignalR 服务会带来一些挑战:
- 需要跨区域通信机制来实现加拿大用户和美国用户之间的对话。
- 开发团队需要管理两个单独的 Azure SignalR 服务,每个服务都有不同的域和连接字符串。
- 如果发生区域性中断,则需将流量切换到另一区域。
利用异地复制
借助新的异地复制功能,Contoso 现在可以在加拿大中部建立副本,从而有效地克服上述障碍。
创建 SignalR 副本
若要创建副本,请导航到 Azure 门户上的 SignalR“副本”边栏选项卡,然后单击“添加”以创建副本。 副本在创建后会自动启用。
创建副本后,可以通过单击副本名称在门户上查看/编辑副本。
注意
- 副本计数目前限制为每个主资源最多 8 个。
定价和资源单元
每个副本都有其自己的 unit
和 autoscale settings
。
副本是 Azure SignalR 服务的高级层的一项功能。 每个副本根据其自己的单元和出站流量单独计费。 免费消息配额也是单独计算的。
在前面的示例中,Contoso 在加拿大中部添加了一个副本。 Contoso 将根据其单位和消息在高级价格中支付加拿大中部的副本费用。
跨区域出站流量将收取出口费用。 如果消息跨副本传输并且在传输后成功发送到客户端或服务器,则该消息将按出站消息计费。
删除副本
为 Azure SignalR 服务创建副本后,如果不再需要它,可以随时将其删除。
若要在 Azure 门户中删除副本:
- 导航到 Azure SignalR 服务,然后选择“副本”边栏选项卡。 单击要删除的副本。
- 单击副本概述边栏选项卡上的“删除”按钮。
了解 SignalR 副本的工作原理
下图简要说明了 SignalR 副本的功能:
- 客户端与应用服务器协商,并接收到一个目标为 Azure SignalR 服务的重定向。 然后,它解析 SignalR 服务的完全限定的域名 (FQDN) -
contoso.service.signalr.net
。 此 FQDN 指向流量管理器,该管理器返回最近的区域 SignalR 实例的规范名称 (CNAME)。 - 使用此 CNAME,客户端建立与区域实例(副本)的连接。
- 这两个副本会相互同步数据。 必要时,发送到一个副本的消息会被传输到其他副本。
- 如果副本未通过流量管理器 (TM) 执行的运行状况检查,TM 会从域解析过程中排除失败实例的终结点。 有关详细信息,请参阅下面的复原能力和灾难恢复
注意
- 在数据平面中,主 Azure SignalR 资源的功能与其副本相同
复原能力和灾难恢复
Azure SignalR 服务利用流量管理器对其副本进行运行状况检查和 DNS 解析。 正常情况下,当所有副本都正常运行时,客户端会被定向到最近的副本。 例如:
- 靠近
eastus
的客户端会被定向到eastus
中的副本。 - 同样,靠近
westus
的客户端会被定向到westus
中的副本。
如果 eastus 发生区域性服务中断(如下所示),流量管理器会检测到该区域的运行状况检查失败。 然后,该故障副本的 DNS 就会被从流量管理器的 DNS 解析结果中排除。 在设置为 90 秒的 DNS 生存时间 (TTL) 过后,eastus
中的客户端会被重定向以与 westus
中的副本连接。
一旦 eastus
中的问题得到解决并且该区域重新联机,运行状况检查就会成功。 然后,eastus
中的客户端会再次被定向到其区域中的副本。 此转换是平稳的,因为在关闭这些现有连接之前,连接的客户端不会受到影响。
此故障转移和恢复过程是自动的,不需要手动干预。
服务器连接的故障转移和恢复工作方式与客户端连接的相同。
注意
- 此故障转移机制适用于 Azure SignalR 服务。 应用服务器的区域性中断的内容超出了本文档的范围。
禁用或启用副本终结点
设置副本时,可选择启用或禁用其终结点。 如果禁用,则主要 FQDN 的 DNS 解析不包括副本,因此不会将流量定向到该副本。
还可在创建终结点后启用“禁用终结点”。 在主资源的副本边栏选项卡上,单击副本右侧的省略号按钮,然后选择“启用终结点”或“禁用终结点”:
删除复制之前,请考虑先禁用其终结点。 随着时间的推移,现有连接将断开连接。 由于没有新的连接,因此复制最终会处于空闲状态。 这可确保无缝的删除过程。
此功能还可用于排查区域问题。
注意
- 由于 DNS 缓存,DNS 更新可能需要几分钟才能生效。
- 现有连接在断开连接之前不会受到影响。
添加副本后对性能的影响
启用副本后,客户端会自然地根据地理位置进行数据分配。 虽然 SignalR 负责在这些副本之间同步数据,但我们会很高兴地告诉你,对于大多数常见用例而言,服务器负载的相关开销很小。
具体来说,如果应用程序通常向较大的组(大小 > 10)或单个连接进行广播,则同步对性能的影响几乎看不到。 如果向小的组(大小 < 10)或单个用户发送消息,你可能会注意到同步开销会多一点。
为了确保有效的故障转移管理,建议设置每个副本的单元大小以处理所有流量。 也可以启用自动缩放来管理它。
有关更多性能评估,请参阅性能。
非继承和继承的配置
副本从主资源继承大多数配置;但是,必须直接在副本上配置某些设置。 下面是这些配置的列表:
- SKU:每个副本都有自身的 SKU 名称和单位大小。 必须根据副本各自的指标单独配置其自动缩放规则。
- 共享的专用终结点:虽然共享的专用终结点会自动复制到副本,但需要在目标专用链接资源上单独进行批准。 若要添加或删除共享的专用终结点,请在主资源上管理它们。 在副本的共享专用终结点获得批准之前不要启用副本。
- 日志目标设置。 如果未在副本上进行配置,则只会传输来自主资源的日志。
- 警报。
所有其他配置都将从主资源继承。 例如,访问密钥、标识、应用程序防火墙、自定义域、专用终结点和访问控制。