Geo-Replication Across Multiple Data Centers
NCache provides you Geo-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.
Geo-Replication Prerequisites for Datacenters
Before using Geo-Replication with NCache ensure that following rerequisites are fulfilled:
- To learn about the standard prerequisites required to work with all NCache server-side features, please refer to the given page Server-Side API Prerequisites.
- For API details, refer to: ICache, CacheItem, IBridgeConflictResolver, BridgeItemVersion.
- This should be a class library project using Microsoft Visual Studio.
- Make sure to configure Bridge using the NCache Management Center 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 the 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 the rules defined in it. It takes two parameters/entries, both are of the 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