WAN Replication across Multiple Datacenters
Note
This feature is only available in NCache Enterprise Edition.
NCache provides you WAN replication as a disaster recovery plan through the Bridge feature. A bridge is created between multiple cluster caches and data is replicated from the source to the other site through that bridge, without disrupting the clients' operations.
For more conceptual and behavioral detail of the bridge, you can refer to Bridge Architecture in Administrator's Guide.
In bridge, there can be more than one active site cache and cache operations can be simultaneous. It is possible that the client connected with one active site cache adds some keys and the same key operation is performed by the other active node. In such a situation the bridge conflict resolver comes into play. It resolves the conflicts and decides which key to apply on the cache depending upon the defined rules.
If the user hasn't configured any conflict resolver rules, then NCache uses the default resolver rule. In the default rule, a timespan is added with each operation performed on the cache and it keeps the latest operation. A check is performed on the version of the bridge item. If it has a newer time stamp or if the version is the latest or the same it replaces that with the new entry and in case of old, it keeps the old entry.
Pre-Requisites
- To implement the interface, include the following namespace in your
application:
Alachisoft.NCache.Runtime.Bridge
Alachisoft.NCache.Runtime.Caching
- This should be a class library project using Microsoft Visual Studio.
- Make sure to configure Bridge using NCache Web Manager after implementing this class.
Sample Implementation of IBridgeConflictResolver Interface
The following sample implementation of the Conflict Resolver contains logic to resolve any conflict that may occur while replicating an operation from bridge for a key that already exists in the cache. Whenever any conflict occurs, the cache calls BridgeConflictResolution
to decide which operation to apply on the cache depending upon rules defined in it. It takes two parameters/entries, both are of ProviderBridgeItem
type. ProviderBridgeItem
contains the following parameters:
public class Resolver : IBridgeConflictResolver
{
public void Init(System.Collections.IDictionary parameters)
{
// Initialize parameters
}
public ConflictResolution Resolve(ProviderBridgeItem oldEntry, ProviderBridgeItem newEntry)
{
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;
// Configure this implementation on cache
}
public void Dispose()
{
// Dispose resources
}
}
See Also
Custom Cache Dependencies
Entry Processor
Configuring Bridge for WAN Replication