您的应用程序可以部署到多个数据中心,用于灾难恢复或流量的地理负载平衡。 如果您的应用程序流量很大,则必须使用分布式缓存。 在这些情况下,您需要确保您的分布式缓存可以进行 WAN 复制,以在发生灾难时实现数据的高可用性。
NCache 提供 Bridge 来处理分布式缓存的 WAN 复制。 它在分布式数据中心之间形成了一座桥梁,并执行数据的异步复制,因此不会降低性能。 此外,网桥本身是一个由两台服务器组成的集群,以实现高可用性。
您可能拥有一个主动数据中心和一个被动数据中心,主要用于灾难恢复目的。 在此配置中,一个主动站点包含网桥和缓存,而被动站点仅包含缓存。 主动站点通过桥将数据异步复制到被动站点,在发生灾难时充当备份。
您可能有两个活动数据中心,用于结合区域负载平衡和隐含的灾难恢复目的。 其中一个活动站点包含网桥和缓存,而一个仅包含缓存,类似于主动-被动配置。 但是,这种情况下的不同之处在于,两个站点都相互复制数据,因为它们都在积极地为客户端操作提供服务。
除了上述配置外, NCache 还提供对三个或更多数据中心的处理。 在这种情况下,站点之一是网桥站点,其中包含网桥和缓存。 其他站点仅包含缓存。 所有非网桥站点都连接到网桥站点,因此数据会同时复制到所有站点。 您还可以在这些站点中的任何一个上创建备份网桥,以确保在网桥站点出现故障时具有高可用性。 有关此配置的更多详细信息,您可以访问博客 了解多数据中心 WAN 复制.
当您有多个活动站点时,有可能在每个站点上同时更新相同的数据。 默认情况下,冲突在 NCache 使用“last-update-wins”逻辑。 但是,您也可以指定自定义冲突解决处理程序,通过根据您的逻辑分析数据来解决冲突。
以下代码片段显示了在缓存上实现的冲突解决程序的简化实现:
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 复制,因此您的应用程序在等待复制操作时不会遇到任何停机时间。
此外,网桥还将多个数据项作为单个批量请求发送到另一个站点,从而大大减少了跨 WAN 的网络行程。 作为一个附加组件,网桥还具有内置复制功能:它是一个 2 节点集群,可以自我复制,因此它本身具有高可用性。 有关更多详细信息 NCache 桥接行为,可以参考 NCache 桥梁架构文档.
NCache 无缝处理上述每种数据中心配置中的灾难情况。