跨多个数据中心的 WAN 复制
NCache 通过桥接功能提供广域网复制,实现多站点复制和灾难恢复。在多个集群缓存之间建立桥接,数据通过该桥接从源站点复制到其他站点,而不会中断客户端的运行。
有关 Bridge 的更多概念和行为细节,您可以参考 桥梁架构 在管理员指南中。
Bridge 中可以有多个活动站点缓存,并且缓存操作可以同时进行。连接到一个活动站点缓存的客户端可能会添加一些键,而另一个活动节点也会执行相同的键操作。在这种情况下,Bridge 冲突解决器就会发挥作用。它会解决冲突,并根据定义的规则决定在缓存上应用哪个键。
如果用户没有配置任何冲突解决器规则,那么 NCache 使用默认解析器规则。在默认规则中,每次对缓存执行操作时都会添加一个时间跨度,并保留最新操作。系统会检查 Bridge 项的版本。如果该项具有较新的时间戳,或者版本是最新版本或相同,则用新条目替换该条目;如果是旧条目,则保留旧条目。
硬件需求
在使用 WAN 复制之前 NCache,请确保满足以下先决条件:
- 安装 Alachisoft.NCache.SDK 应用程序中的 NuGet 包。
- 要实现该接口,请在应用程序中包含以下命名空间:
- 有关 API 详细信息,请参阅: 缓存, 缓存项, IBridge冲突解决器, 桥项版本, 提供者桥接项目, 解决冲突,解决行动, 桥项操作码.
- 这应该是一个使用 Microsoft Visual Studio 的类库项目。
- 确保 配置网桥 使用 NCache 管理中心实施本班后。
IBridgeConflictResolver 接口的示例实现
以下冲突解决器的示例实现包含解决从 Bridge 复制操作(针对缓存中已存在的键)时可能发生的任何冲突的逻辑。每当发生任何冲突时,缓存都会调用 Resolve 根据其中定义的规则来决定对缓存应用哪个操作。 它需要两个参数/条目,两者都是 ProviderBridgeItem 类型。
public class Resolver : IBridgeConflictResolver
{
public void Init(System.Collections.IDictionary parameters)
{
// Initialize parameters
}
public ConflictResolution Resolve(ProviderBridgeItem oldEntry, ProviderBridgeItem newEntry)
{
try
{
var conflictResolution = new ConflictResolution();
switch (oldEntry.BridgeItemVersion)
{
case BridgeItemVersion.OLD:
{
conflictResolution.ResolutionAction = ResolutionAction.ReplaceWithNewEntry;
}
break;
case BridgeItemVersion.LATEST:
{
conflictResolution.ResolutionAction = ResolutionAction.KeepOldEntry;
}
break;
case BridgeItemVersion.SAME:
{
if (oldEntry.OpCode == BridgeItemOpCodes.Remove)
{
conflictResolution.ResolutionAction = ResolutionAction.ReplaceWithNewEntry;
}
else
{
conflictResolution.ResolutionAction = ResolutionAction.KeepOldEntry;
}
}
break;
}
}
return conflictResolution;
catch (Exception ex)
{
// Wrap and throw to ensure the Bridge service logs the specific synchronization failure
throw new OperationFailedException("Error occurred during conflict resolution logic.", ex);
}
// Configure this implementation on cache
}
public void Dispose()
{
// Dispose resources
}
}
注意:
为确保操作是故障安全的,建议处理应用程序中的任何潜在异常,如中所述 处理故障.