애플리케이션이 데이터베이스에 크게 의존하는 경우 캐싱은 특히 트래픽이 많은 시나리오에서 데이터베이스와 관련된 문제를 극복하는 데 중요합니다. 캐싱을 사용하여 데이터 검색 속도를 높이는 온라인 애플리케이션의 경우 강력한 데이터 복제를 구현하는 것이 일관성과 가용성을 유지하는 데 중요합니다.
데이터 복제는 여러 서버에서 필수적인 캐시 데이터의 백업을 생성하고, 데이터 무결성을 유지하고, 고가용성을 보장하는 데 중요합니다. 마찬가지로 이러한 동기화 메커니즘은 애플리케이션 프로세스 불일치를 방지하는 데 필수적입니다. 따라서 포괄적인 데이터 복제 전략을 만드는 데 최선을 다해야 합니다. 다행히도, NCache 이러한 복제 및 동기화 메커니즘의 중요성을 깨닫고 아래 블로그에 자세히 설명된 대로 사용자에게 다양한 선택 옵션을 제공합니다.
NCache 토폴로지
다양한 캐싱 토폴로지가 지원됩니다. NCache ( 미러, 복제예산 및 파티션-복제본 토폴로지(아래에 설명되어 있음)이 이 능력을 강조합니다.
- 미러 토폴로지: Mirrored 토폴로지에서 캐시 클러스터에는 두 개의 노드가 있으며, 두 노드 중 하나만 한 번에 활성 상태이고 다른 하나는 수동 노드로 작동합니다. 기본적으로 Mirrored Cache 토폴로지의 모든 읽기 및 쓰기 작업의 경우 클라이언트 노드는 클러스터의 활성 서버 노드에만 연결합니다. 활성 노드가 실패하면 수동 노드가 원활하게 인계하여 문제 없이 고가용성을 보장합니다.
- 복제된 토폴로지: 이 토폴로지는 클러스터의 모든 서버 노드에서 캐시 데이터를 복제합니다. 모든 노드에는 캐시의 전체 사본이 포함되어 있으므로 여러 노드가 실패하더라도 데이터가 손실되지 않습니다.
- 파티션-복제본 토폴로지: Partition-Replica Topology는 확장성을 위해 Partitioned Topology에서 사용 가능한 동적 파티션을 생성할 뿐만 아니라, 연결 실패 또는 노드 실패 시 백업 역할을 하는 다른 서버 노드에 이러한 파티션의 동적 복제본을 생성합니다. 이러한 상황에서 NCache 복제 노드에서 캐시 데이터를 가져와 필요에 따라 배포합니다.
블로그에서 토폴로지에 대해 자세히 알아보세요. 확장 및 유지: 토폴로지 탐색 NCache.
데이터 복제 NCache
데이터 복제의 주요 목표는 데이터 가용성, 일관성 및 내결함성을 보장하는 것입니다. 서로 다른 위치에 동일한 데이터 사본을 유지함으로써 시스템은 성능을 향상시키고 대기 시간을 줄이는 동시에 잠재적인 데이터 손실이나 서버 장애로부터 보호할 수 있습니다. 데이터 복제는 아래에서 설명한 대로 사용된 토폴로지에 따라 동기식 또는 비동기식입니다.
- 동기 복제: 동기 복제를 사용하면 NCache 데이터가 기본 캐시 서버와 해당 복제본에 동시에 기록되도록 합니다. 그러나 이 방법은 고가용성이 우선순위인 경우에 이상적이지만, 모든 캐시 쓰기 작업이 모든 복제본의 확인을 기다려야 하기 때문에 애플리케이션 성능이 저하될 가능성이 있습니다.
- 비동기 복제: 또는 비동기 복제는 기본 캐시 서버에 데이터를 쓴 후 복제본을 업데이트합니다. 이 방법은 복제본 확인을 기다리지 않고 쓰기 작업을 완료할 수 있으므로 성능이 향상됩니다. 그러나 이 전략은 복제본과 기본 캐시 서버 간에 일시적인 데이터 불일치를 초래할 수 있습니다.
동기 및 비동기 데이터 복제를 위한 토폴로지
논의된 각 토폴로지는 고유한 특성 세트를 제공하지만 모든 토폴로지가 데이터 복제에 적합한 것은 아닙니다. 예를 들어, 동기화된 복제는 미러링된 캐시 토폴로지, 기본 노드와 복제본 노드에 동시에 기록하여 데이터 일관성을 보장합니다. 반면에 기본 노드에 먼저 쓰고 나중에 복제본을 업데이트함으로써 비동기식 복제가 사용됩니다. 복제된 캐시 토폴로지, 효율성을 개선하지만 가끔 오류가 발생할 수 있습니다. 그러나 복제에는 문제가 있습니다. 예를 들어 데이터 크기가 기하급수적으로 증가하면 데이터를 분할해야 합니다.
다행히도 파티션-복제본 토폴로지 Partitioned 및 Replicated Cache 토폴로지의 장점을 결합하여 가용성, 중복성 및 성능 간의 균형을 맞춥니다. 요구 사항에 따라 가장 적합한 기술을 선택할 수 있습니다.
데이터 일관성 메커니즘
데이터 일관성은 사용자 작업과 관계없이 애플리케이션 스택 전체에서 정보의 안정성과 정확성을 의미합니다. 데이터 일관성을 보장하려면 NCache 를 제공합니다 분산 잠금 업데이트 중에 특정 캐시 항목을 잠글 수 있는 메커니즘입니다. 따라서 여러 사용자가 구성 요소 수준에서 잠금을 적용하여 데이터 무결성을 손상시키지 않고 다양한 캐시 항목에서 동시에 작업할 수 있습니다. 따라서 캐시 잠금은 분산 환경에서 공유 리소스를 관리하는 데 유용합니다.
NCache 두 가지 유형의 잠금 기능을 제공합니다. 낙관적 잠금(캐시 항목 버전) 비관적 잠금(배타적 잠금). 낙관적 잠금은 캐시 항목 버전 관리를 사용합니다. 이 유형의 잠금에서는 추가 이 방법은 캐시에 새 항목을 추가하고 처음으로 항목 버전을 저장하는 반면, 끼워 넣다 이 방법은 기존 항목의 값을 덮어쓰고 해당 항목의 버전을 업데이트합니다.
다음 예제는 잠금 핸들 그런 다음 Product:1001 키와 항목 버전을 사용하여 항목을 잠급니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// An item is added in the cache with itemVersion // Specify the key of the cacheItem string key = "Product:1001"; // Initialize the cacheItemVersion CacheItemVersion version = null; // Get the cacheItem previously added in the cache with the version CacheItem cacheItem = cache.GetCacheItem(key, ref version); // If result is not null and version is valid if (cacheItem != null && version != null) { // CacheItem is retrieved successfully with the version // If result is of type Product var prod = cacheItem.GetValue<Product>(); prod.UnitsInStock++; else { // Item could not be retrieved; it might not exist or the version is outdated Console.WriteLine("Cache item could not be retrieved or version is invalid."); } |
또는 비관적 잠금은 잠금 핸들을 사용하여 항목을 잠그고 다른 모든 사용자가 해당 캐시 항목에 대한 쓰기 작업을 수행하지 못하도록 차단합니다. 항목을 페치하는 동안 잠금을 성공적으로 획득하면 애플리케이션은 잠금이 해제될 때까지 다른 애플리케이션이 해당 항목에 액세스하거나 수정할 수 없다는 것을 알고 해당 항목에 대한 작업을 안전하게 수행할 수 있습니다. 다음 예제는 캐시에서 항목을 잠근 다음 LockHandle을 사용하여 항목을 가져옵니다. 그런 다음 항목이 업데이트된 다음 Insert API를 사용하여 캐시에 다시 삽입됩니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Specify the key of the item string key = $"Product:1001"; // Set acquireLock flag as true bool acquireLock = true; // Specify time span of 10 seconds for which the item remains locked TimeSpan lockSpan = new TimeSpan(0, 0, 10); // Initialize the lockHandle LockHandle lockHandle = null; CacheItem item = cache.GetCacheItem(key, acquireLock, lockSpan, ref lockHandle); var product = new Product(); product = item.GetValue<Product>(); // Update the unitsinstock for the product product.UnitsInStock = 200; bool releaseLock = true; // Item is already locked with a LockHandle // Update the item and release the lock as well since releaseLock is set true // Make sure that the LockHandle matches with the already added LockHandle cache.Insert(key, item, null, lockHandle, releaseLock); |
데이터 복제 및 일관성을 위한 추가 메커니즘
이제 우리는 데이터 복제와 일관성 메커니즘에 대해 배웠습니다. NCache, 데이터 일관성 및 데이터 복제에 사용할 수 있는 다른 전략을 살펴보겠습니다. 예를 들어, NCache 캐시 데이터를 만료하기 위한 시간 기반 데이터 무효화 전략을 지원합니다. 데이터 무효화는 다음을 통해 수행됩니다. 만료 즉, 데이터가 캐시에 남아 있는 특정 시간 기간을 설정할 수 있으며, 그 후 만료됩니다. 이런 방식으로 캐시는 다음 클라이언트 요청 시 최신 데이터를 갖게 되므로 오래된 데이터를 제거하고 데이터 일관성을 보장합니다. 또한 무효화를 통해 종속성 데이터베이스에 변경 사항이 발생할 때마다 캐시 데이터가 제거되도록 합니다.
맺음말
데이터 복제 및 일관성은 안정적인 고성능 애플리케이션의 백본입니다. 다행히도 NCache, 가장 복잡한 데이터 요구 사항도 처리할 수 있는 고도로 확장 가능하고 내결함성이 있는 애플리케이션을 만들 수 있는 강력한 기능에 액세스할 수 있습니다. 왜 기다리시나요? 다운로드 NCache 오늘 바로 애플리케이션 성능을 한 단계 업그레이드하세요!






