Azure Cosmos DB는 최근 큰 인기를 얻고 있는 새로운 NoSQL 클라우드 기반 데이터베이스 솔루션입니다. Cosmos DB에서 캐싱을 사용하면 데이터베이스 접근 횟수를 줄여 애플리케이션 성능을 향상시키고 트랜잭션 비용을 최적화할 수 있다는 것은 널리 알려진 사실입니다.
그러나 분산 캐시에서 Cosmos DB 데이터를 캐싱하면 이 데이터의 두 복사본이 생성될 수 있습니다. 하나는 데이터베이스에, 다른 하나는 캐시에 있습니다. 캐시에 액세스할 수 없는 애플리케이션이 Cosmos DB에서 이 데이터를 직접 변경하는 경우 캐시는 이를 인식하지 못합니다. 이로 인해 캐시에 데이터베이스와 비교하여 이전 데이터 복사본이 있습니다.
이 오래된 데이터는 오래된 데이터로 작업하면 성능에 큰 영향을 미치는 트랜잭션이 많은 다중 환경 애플리케이션의 주요 문제입니다. 이 블로그에서는 캐싱을 계속 사용하면서 이 "부실 데이터" 문제를 피할 수 있는 방법에 대해 설명합니다.
주요 요점
실시간 데이터 일관성: NCache Azure Cosmos DB 변경 피드를 활용합니다. NotifyExtensibleDependency 데이터를 자동으로 동기화하는 기능으로, 분산 캐시가 항상 최신 정보가 아닌 오래된 정보를 제공하도록 보장합니다.
RU 비용 80% 절감: 조직은 빈번한 읽기 요청을 데이터베이스에서 인메모리 캐시로 오프로드함으로써 Azure Cosmos DB 요청 단위(RU) 사용량과 운영 비용을 대폭 줄일 수 있습니다.
1밀리초 미만의 지연 시간: 읽기 통과 제공자를 구현하면 다음과 같은 이점을 얻을 수 있습니다. NCache 누락된 항목을 코스모스 데이터베이스에서 자동으로 가져와 저장함으로써 애플리케이션 응답 시간을 초고속으로 유지합니다.
자동화된 .NET 통합: Cosmos DB SQL API에 대한 네이티브 지원을 통해 동기화 로직이 캐시 수준에 집중되므로 애플리케이션 계층에서 복잡한 수동 캐시 무효화 코드를 작성할 필요가 없습니다.
동기화 방법 NCache Azure Cosmos DB를 사용하여 데이터 일관성을 확보하시겠습니까?
NCache 강력한 기능이 풍부하게 포함된 매우 강력한 분산 캐싱 솔루션입니다. 모든 분산 캐시와 마찬가지로 NCache 데이터베이스와 애플리케이션 사이에 위치하여 데이터베이스의 데이터를 애플리케이션에서 사용할 수 있도록 캐시합니다. 따라서 읽기/쓰기 시간을 기하급수적으로 줄여줍니다. 데이터베이스에서 반복적인 읽기 요청을 캐시로 오프로드함으로써 이러한 효과를 얻을 수 있습니다. NCache이를 통해 조직은 요청 단위(RU) 소비량을 최대 80%까지 줄여 피크 트래픽 시 성능 병목 현상을 방지할 수 있습니다. 또한, 앞서 설명한 오래된 데이터 문제도 해결해 줍니다. 확장 가능한 종속성 알림.

그림 1 : NCache Azure Cosmos DB 동기화 워크플로.
NotifyExtensibleDependency를 통해 데이터베이스(이 경우 Cosmos DB)의 알림이 처리되는 사용자 지정 데이터 종속성 논리를 작성할 수 있습니다. NCache 를 사용하여 피드 변경 코스모스 DB의 메커니즘.
Cosmos DB의 모든 수정 사항은 NotifyExtensibleDependency 코드에 통합된 Cosmos DB 변경 피드 프로세서 논리를 사용하여 캡처할 수 있습니다. 이는 이벤트 처리 메커니즘을 사용하여 데이터베이스 콘텐츠 수정에 대한 응답으로 캐시 무효화를 적용하여 오래된 데이터가 캐시에 유지되지 않도록 하는 방법입니다.
의 ReadThru 제공자 기능을 사용할 수도 있습니다. NCache Cosmos DB 애플리케이션의 성능을 더욱 향상시키기 위해 이 기능을 통해 캐시가 캐시에 존재하지 않는 항목에 대해 데이터베이스에서 직접 조사하도록 할 수 있습니다. 캐시는 데이터베이스(Cosmos DB)에서 요청된 항목을 찾을 뿐만 아니라 성공적으로 검색되면 캐시 내부에 요청된 항목을 저장합니다.
자동화된 동기화 공급자가 수동 캐시 관리보다 가지는 장점을 이해하려면 다음 비교를 고려해 보세요.
| 제품 특장점 | 수동 캐시 별도 | NCache 동기화(변경 피드) |
|---|---|---|
| 데이터 일관성 | 어쩌면 일어날 수도 있는: 데이터베이스를 외부에서 업데이트할 경우 "오래된 데이터"가 될 위험이 높습니다. | 강력/실시간: 캐시는 Cosmos DB 변경 피드를 통해 즉시 업데이트됩니다. |
| 성능 영향 | 변하기 쉬운: 잦은 "캐시 미스"는 데이터베이스 지연 시간을 증가시킵니다. | 예측 가능: 읽기 작업이 많은 워크로드에서 거의 100%에 가까운 캐시 적중률을 보여줍니다. |
| 비용 효율성 | 비싼: 반복적인 데이터베이스 읽기로 인해 요청 단위(RU) 사용량이 높습니다. | 비용 효율적 : 메모리에서 데이터를 제공하여 RU 사용량을 획기적으로 줄입니다. |
| 실시 | 복잡한각 애플리케이션 인스턴스마다 사용자 지정 로직이 필요합니다. | 쉽게 한: 캐시 수준에서 중앙 집중식 공급자 기반 동기화. |
| 자동화 | 수동 : 개발자는 캐시를 무효화하거나 업데이트하는 코드를 작성해야 합니다. | 자동화: NCache 데이터베이스를 모니터링하고 업데이트를 자체적으로 처리합니다. |
NCache 세부 정보 NotifyExtensibleDependency 캐싱을 통해 읽기
Cosmos DB와 캐시 동기화: 빠른 예
예를 들어 Cosmos DB를 전자 상거래 상점의 데이터베이스로 사용하고 자주 사용하는 데이터를 NCache. 귀하의 상점에는 수만 개의 제품이 있으며 평균적으로 매일 백만 건의 거래가 발생합니다. NCache Cosmos 데이터베이스의 부하를 줄이는 데 도움이 되지만 캐시의 데이터가 부실해질 가능성이 있습니다. 위에서 논의한 바와 같이, NCache 전자 상거래 상점의 최적 기능을 보장하는 NotifyExtensibleDependency 기능으로 이 문제를 해결합니다.
다음 코드 예제에서는 NotifyExtensibleDependency 기능의 사용법을 보여줍니다. 이 예에서 제품은 해당 ID를 기반으로 데이터베이스에서 로드됩니다. 그런 다음 NotifyExtensibleDependency가 생성되고 가져온 제품에 대해 등록됩니다. 마지막으로 제품의 형태는 캐시 아이템 지정된 키와 함께 캐시에 삽입됩니다.
또한 CosmosDbNotificationDependency는 캐시에 배포된 공급자의 이름입니다. 이 공급자는 다음을 구현합니다. ICustomDependencyProvider 인터페이스.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Product product = LoadProductFromDatabase(productId); string providerName = "CosmosDbNotificationDependency"; //This is the name of your provider deployed on cache server string key = "Product#" + product.Id ; IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("Key", key); parameters.Add("CacheId", "myCache"); parameters.Add("EndPoint", ""); parameters.Add("AuthKey", ""); parameters.Add("DatabaseName", "demoDatabase"); parameters.Add("MonitoredCollection", "Customers"); parameters.Add("LeaseEndPoint", ""); parameters.Add("LeaseAuthKey", ""); parameters.Add("LeaseDatabaseName", "demoDatabase"); parameters.Add("LeaseCollection", "leases"); CacheItem item = new CacheItem(product); item.Dependency = new CustomDependency(providerName, parameters); _cache.Insert(key, item); |
구현과 관련된 자세한 내용은 다음을 참조하십시오. GitHub의 저장소.
NCache 세부 정보 NotifyExtensibleDependency 캐시 작업 NCache
사용 NCache 자동 로딩을 위한 Cosmos DB 기반 읽기 통과 제공자
의 Read-Through 기능 NCache (이름에서 알 수 있듯이) 캐시에서 항목을 찾을 수 없는 경우 캐시를 통해 데이터베이스(Cosmos DB)로 직접 읽을 수 있습니다. 이 기능은 기본적으로 캐시에서 요청된 항목을 찾을 수 없을 때 데이터베이스에서 항목을 직접 찾는 번거로움을 덜어줍니다. 이 기능을 통해서 뿐만 아니라 NCache 요청된 항목에 대한 데이터베이스를 읽고 나중에 빠른 검색을 위해 캐시에 삽입합니다.
다음 코드 예제에서는 Get<> 메서드를 사용하여 지정된 키 "Product:1001"에 해당하는 read-through가 활성화된 항목을 검색합니다.
|
1 2 3 4 5 6 7 8 9 |
// Specify the key of the item string key = "Product:1001"; // Specify the readThruOptions for read through operations var readThruOptions = new ReadThruOptions(); readThruOptions.Mode = ReadMode.ReadThru; // Retrieve the data of the corresponding item with reads thru enabled Product data = cache.Get(key, readThruOptions); |
NCache 세부 정보 캐싱을 통해 읽기 캐시 작업 NCache
맺음말
요약하자면, NCache Cosmos DB와 캐시 간의 데이터 동기화를 위한 유연한 솔루션을 제공하여 데이터 불일치를 방지합니다. NCache인 메모리 분산 캐싱 솔루션은 Cosmos DB가 보다 쉽게 액세스하고 처리할 수 있도록 최신 데이터를 유지하는 데 이상적인 매체가 될 수 있습니다.
NCache 세부 정보 다운로드 NCache 클라우드 배포 옵션 NCache
자주 묻는 질문 (FAQ)
Q : 어떻게합니까? NCache Azure Cosmos DB에서 데이터 일관성을 보장하려면 어떻게 해야 할까요?
A: NCache Cosmos DB 변경 피드를 활용하여 실시간 데이터 일관성을 보장합니다. NotifyExtensibleDependency 특색, NCache 데이터베이스의 리스너 역할을 하며, 코스모스 DB에 문서가 삽입, 업데이트 또는 삭제될 때마다 이를 감지합니다. NCache 변경 사항을 자동으로 동기화하여 분산 캐시에 오래된 데이터가 쌓이는 것을 방지합니다.
Q : 할 수 있습니다 NCache Azure Cosmos DB 요청 단위(RU) 비용을 줄이시겠습니까?
A: 네. 자주 액세스하는 데이터를 메모리 내 분산 캐시에서 제공함으로써, NCache 데이터베이스에서 반복적인 읽기 요청의 부하를 줄여줍니다. 이를 통해 요청 단위(RU) 사용량을 최대 80%까지 줄일 수 있어 운영 비용을 크게 절감하고 트래픽이 많은 시간대에 성능 병목 현상을 방지할 수 있습니다.
Q : 않습니다 NCache Cosmos DB SQL API를 지원하시나요?
A: NCache Cosmos DB SQL API에 대한 네이티브 통합을 제공합니다. 구현을 통해 ICosmosDbSyncProvider 이 인터페이스를 통해 개발자는 .NET 애플리케이션과 Cosmos DB SQL 컨테이너 간에 원활한 연결을 구축하여 자동 동기화를 수행할 수 있습니다.
Q: Cosmos DB에서 읽기 통과 공급자(Read-Through Provider)를 사용하면 어떤 이점이 있습니까?
A: 읽기 통과 제공자는 허용합니다. NCache 코스모스 DB와 직접 통신합니다. "캐시 미스"가 발생하면 NCache 누락된 항목을 데이터베이스에서 자동으로 가져와 향후 요청을 위해 캐시에 저장합니다. 이를 통해 데이터 액세스 로직이 중앙 집중화되고 캐시에 가장 많이 요청되는 데이터가 항상 채워지도록 하여 애플리케이션 지연 시간을 개선합니다.
Q: 동기화는 어떻게 되나요? NCache 그리고 코스모스 DB는 실시간으로 작동하나요?
A: 동기화는 거의 실시간으로 이루어집니다. 왜냐하면 NCache 풀 기반 폴링 간격 대신 푸시 기반 변경 피드 프로세서 메커니즘을 사용하므로 업데이트는 일반적으로 Cosmos DB 컨테이너에 커밋된 후 몇 밀리초 이내에 캐시에 반영됩니다.

