여러 데이터 센터에 걸친 지리적 복제
NCache 브리지 기능을 통해 재해 복구 계획으로 지역 복제를 제공합니다. 여러 클러스터 캐시 사이에 브리지가 생성되고 데이터는 클라이언트 작업을 중단하지 않고 해당 브리지를 통해 소스에서 다른 사이트로 복제됩니다.
브리지의 개념 및 동작에 대한 자세한 내용은 다음을 참조하세요. 교량 건축 관리자 안내서에 있습니다.
브리지에는 둘 이상의 활성 사이트 캐시가 있을 수 있으며 캐시 작업이 동시에 수행될 수 있습니다. 하나의 활성 사이트 캐시에 연결된 클라이언트가 일부 키를 추가하고 다른 활성 노드에서 동일한 키 작업이 수행될 수 있습니다. 이러한 상황에서는 브리지 충돌 해결 프로그램이 작동합니다. 충돌을 해결하고 정의된 규칙에 따라 캐시에 적용할 키를 결정합니다.
사용자가 충돌 해결 규칙을 구성하지 않은 경우 NCache 기본 해석기 규칙을 사용합니다. 기본 규칙에서는 캐시에서 수행되는 각 작업에 시간 범위가 추가되고 최신 작업이 유지됩니다. 브리지 항목의 버전에 대한 확인이 수행됩니다. 최신 타임 스탬프가 있거나 버전이 최신이거나 동일하면 새 항목으로 교체하고 이전 항목의 경우 이전 항목을 유지합니다.
데이터 센터에 대한 지역 복제 필수 구성 요소
지역 복제를 사용하기 전에 NCache 다음 요구 사항이 충족되었는지 확인하세요.
- 모든 작업에 필요한 표준 전제 조건에 대해 알아보려면 NCache 서버 측 기능은 다음 페이지를 참조하십시오. 서버 측 API 전제 조건.
- API 세부 정보는 다음을 참조하세요. 아이캐시, 캐시 아이템, IBridgeContributeResolver, BridgeItemVersion.
- 이것은 Microsoft Visual Studio를 사용하는 클래스 라이브러리 프로젝트여야 합니다.
- 에 있는지 확인 브리지 구성 를 사용하여 NCache 이 클래스를 구현한 후 관리 센터.
IBridgeConflictResolver 인터페이스의 샘플 구현
다음 충돌 해결 프로그램 샘플 구현에는 캐시에 이미 존재하는 키에 대한 브리지에서 작업을 복제하는 동안 발생할 수 있는 충돌을 해결하는 논리가 포함되어 있습니다. 충돌이 발생할 때마다 캐시가 호출됩니다. BridgeConflictResolution
캐시에 정의된 규칙에 따라 캐시에 적용할 작업을 결정합니다. 두 개의 매개변수/항목이 필요하며 둘 다 ProviderBridgeItem
유형. ProviderBridgeItem
다음 매개변수를 포함합니다.
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
}
}