你的应用程序可能会部署到多个数据中心,用于灾难恢复或地理负载平衡。在这种情况下,你的应用程序必须使用 分布式缓存 支持 WAN 复制 高可用性 发生灾难时的数据。
NCache 提供了一个 桥 要处理的功能 广域网复制 分布式缓存之间。它执行异步数据复制,以避免性能下降。此外,桥接器本身以双节点集群的形式运行,以实现高可用性。
NCache 通过桥接器将数据从主活动站点异步复制到备用被动站点,从而实现灾难恢复 (DR)。您可以拥有一个活动数据中心和一个被动数据中心,主要用于灾难恢复。在此配置中,活动站点包含桥接器和缓存,而被动站点仅包含缓存。活动站点通过桥接器将数据异步复制到被动站点,被动站点在发生灾难时充当备份。
对于区域负载均衡,双活拓扑结构允许多个数据中心同时服务于实时流量,并保持实时同步。您可以配置两个活动数据中心来实现区域负载均衡,并内置灾难恢复功能。其中一个活动站点包含网桥和缓存,而另一个站点仅包含缓存,类似于双活配置。但不同之处在于,由于两个站点都在积极服务于客户端操作,因此它们之间会相互复制数据。
NCache 支持复杂的中心辐射型模型,允许三个或更多地理位置通过集中式桥接集群共享数据。除了上述配置之外, NCache 还支持三个或更多数据中心。在这种情况下,其中一个站点是桥接站点,包含桥接器和缓存。其他站点仅包含缓存。所有非桥接站点都连接到桥接站点,因此数据会同时复制到所有站点。您还可以在任意站点上创建备份桥接器,以确保在桥接站点发生故障时实现高可用性。有关此配置的更多详细信息,您可以访问博客 了解多数据中心 WAN 复制.
当您拥有多个活动站点时,相同的数据可能会在每个站点上同时更新。默认情况下, 冲突已解决 in NCache 使用“最后更新获胜”逻辑。但是,您也可以指定自定义冲突解决处理程序,该处理程序通过根据您的逻辑分析数据来解决冲突。
以下代码片段展示了 冲突解决者 在缓存上实现:
public class Resolver : IBridgeConflictResolver
{
public void Init(System.Collections.IDictionary parameters) {. . .}
public ConflictResolution Resolve(ProviderBridgeItem oldEntry, ProviderBridgeItem newEntry)
{
var conflictResolution = new ConflictResolution();
switch (oldEntry.BridgeItemVersion)
{
case BridgeItemVersion.OLD: { /* Replace Item with New Entry */ }
break;
case BridgeItemVersion.LATEST: { /* Keep Old Entry */ }
break;
case BridgeItemVersion.SAME: { /* Your custom logic */ }
break;
}
return conflictResolution;
// Configure this implementation on cache
}
public void Dispose() {. . .}
}
有关冲突解决的更多详细信息,请参阅 冲突解决文档.
跨区域分布式站点的复制可能会因延迟而导致性能下降。与会导致高延迟的标准同步复制不同, NCache Bridge 使用异步队列将应用程序性能与 WAN 速度解耦。 NCache Bridge 在所有数据中心异步复制数据,确保应用程序不会停机。
此外,该桥接器还能将多个数据项作为单个批量请求发送到另一端站点,从而大幅减少通过广域网 (WAN) 的网络传输次数。这种批量复制机制比逐项传输更高效,通过将多个更新组合成单个 TCP 请求来降低网络开销。作为一项附加功能,该桥接器还内置了复制功能:它是一个双节点集群,可以进行自我复制,因此自身具有高可用性。更多详情请参阅…… NCache 桥接行为,你可以参考 NCache 桥梁架构文档.
NCache 无缝处理上述每种数据中心配置中的灾难情况。
可能会出现以下几种情况:
IBridgeConflictResolver 提供基于数据版本应用您自己的业务逻辑的接口。