오늘날 대부분의 번창하는 전자 상거래 비즈니스는 과거 어느 시점에서 느린 웹 사이트 반응 시간으로 어려움을 겪었습니다. 이것은 부분적으로 사용자 선호도의 패러다임 변화로 인한 것입니다. 즉, 온라인 구매에 대한 경향이 더 강해졌습니다. 따라서 전통적인 메커니즘은 고객 요청의 유입을 유지하는 데 실패했습니다.
다음과 같은 인메모리의 선형 확장 가능한 분산 캐싱 솔루션의 출현으로 NCache, 비즈니스 응답 시간이 크게 개선되었습니다. 대부분의 번영하는 기업은 시스템 아키텍처의 일부인 캐싱 계층을 가지고 있습니다. 이는 초기에 비즈니스에 상당한 호황을 가져왔습니다.
NCache 세부 정보 NCache 로더 문서 NCache 로더 관리 가이드
캐시 로더란 무엇입니까?
계속 진행하기 전에 시나리오를 고려해 보겠습니다. 귀사는 자정에 깜짝 할인을 도입할 계획입니다. 이때 사용자 요청의 유입이 시작됩니다. 따라서 판매가 공식적으로 시작되기 전에 관련 할인 정보와 함께 캐시를 로드하는 것은 어떻습니까? 이렇게 하면 사용자 요청이 쏟아지면 이를 처리할 관련 정보를 갖추게 됩니다.
다음과 같은 엔터프라이즈 캐싱 솔루션 NCache 특수 캐싱 기능을 통합하여 이러한 초기 성능 지연을 극복하도록 도와줍니다. 캐시 시작 로더 캐시를 미리 로드합니다. NCache 노출 ICacheLoader 구현할 수 있는 인터페이스 서버에 배포. 논리에 따라 시작 시 데이터가 백그라운드 프로세스로 캐시에 미리 로드됩니다.
XNUMXD덴탈의 NCache ICacheLoader 인터페이스는 다음 세 가지 방법을 노출합니다. 초기화, 이및 LoadDatasetOnStartup 비즈니스 요구 사항에 따라 사용자 정의 코드를 작성할 수 있습니다.
1 2 3 |
public void Init(IDictionary<string, string> parameters, string cacheName); public object LoadDatasetOnStartup(string dataset); public void Dispose(); |
캐시 로더 기능
풍부한 기능 세트와 함께 제공되는 NCache 시작 로더 향상된 사용자 경험을 촉진하는 데 도움이 됩니다. 클라이언트가 직면한 문제를 고려하면서 이를 해결하는 방법을 모색하면서 개발되었습니다.
주제에 대한 더 깊은 이해를 돕기 위해 핵심을 살펴보겠습니다. NCache 아래 로더 기능:
쉽게 구성 가능
XNUMXD덴탈의 ICacheLoader
인터페이스는 구성하기 쉽습니다. 이를 구현한 다음 다음을 통해 로직을 배포하기만 하면 됩니다. NCache 서버 측의 관리자. 캐시 로더 기능을 활성화하면 캐시 시작 시 코드가 자동으로 실행됩니다.
논리적 데이터 세트
다중 노드 캐시 클러스터에서 작업하는 경우 데이터를 논리 집합으로 나누고 NCache 이러한 그룹을 라운드 로빈 방식으로 클러스터 노드에 할당하여 데이터 로드 프로세스의 속도를 높입니다.
XNUMX노드 클러스터가 있고 비즈니스에서 두 개의 데이터 세트를 로드해야 한다고 가정해 보겠습니다. products
및 suppliers
. 인터페이스 논리에 포함하고 다음을 지정하기만 하면 됩니다. 데이터 세트 귀하의 캐시 구성. NCache 두 클러스터 노드에서 병렬로 데이터 로드를 시작합니다.
다음은 메서드의 샘플 구현입니다. LoadDatasetOnStartup:
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 27 28 29 30 31 32 33 |
public object LoadDatasetOnStartup(string dataset) { // Create a list of datasets to load at cache startup IList<object> datasetToLoad; switch (dataSet.ToLower()) { // If dataset is "products", fetch products from data source to load in cache case "products": datasetToLoad = FetchProductsFromDataSource(); // Insert fetched product in the cache foreach (var product in datasetToLoad) { string key = $"ProductID:{product.Id}"; cache.Insert(key, product); } break; // If dataset is "suppliers", fetch suppliers from data source to load in cache case "suppliers": // load suppliers from database and add the cache. break; default: // Invalid dataset } // User context is the time at which datasets were loaded in the cache object userContext = DateTime.Now; return userContext; } |
전용 로더 서비스
NCache 각 서버 노드에서 전용 로더 서비스를 사용하여 전체 캐시 속도를 향상시킵니다. 이것은 중요한 NCache 대용량 데이터 세트가 캐시에 미리 로드되어야 하는 경우 별도의 로더 서비스가 일반 캐시 성능을 방해하지 않도록 보장하기 때문입니다.
NCache 세부 정보 ICacheLoader 인터페이스 문서 NCache 배포 공급자 가이드
NCache 캐시 데이터를 다시 로드하기 위한 리프레셔
사전 로드된 캐시가 얼마나 도움이 될 수 있는지 알고 있지만 백엔드 데이터 소스에서 정기적인 업데이트가 있는 경우 캐시 데이터가 오래될 가능성이 큽니다. 이러한 시나리오에서 캐시에 채워진 데이터는 의미 있는 상태로 유지되지 않습니다. 사전 로드된 캐시의 목적을 모두 충족하지 못합니다.
이전 섹션의 전자 상거래 예를 계속하여 첫 번째 단계에서 선택한 항목에 대해 25% 고정 할인을 제공했지만 갑자기 할인율을 50%로 높이고 전체 항목에 적용하기로 결정했다고 가정합니다. stock – 기존 캐시 데이터는 어떻게 됩니까? 이제는 구식입니다. 즉, 캐시에서 관련 데이터 세트를 새로 고치는 메커니즘이 필요합니다.
NCache 이러한 상황에 대한 솔루션이 있습니다. 사용자가 소스의 최신 데이터로 주기적으로 캐시를 새로 고칠 수 있습니다. 당신은 이것을 할 수 있습니다 데이터 세트 예약 또는으로 리프레셔 호출 주문형.
캐시를 새로 고쳐야 하는 시기를 예측할 수 있는 경우 다음을 구현할 수 있습니다. RefreshDataset
방법을 선택하고 시간, 일, 주 또는 월이 될 수 있는 적절한 시간 간격을 선택합니다.
다음은 메서드의 샘플 구현입니다. 새로 고침 데이터 세트:
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 27 28 29 |
public object RefreshDataset(string dataset, object userContext) { DateTime? lastRefreshTime; switch (dataset.ToLower()) { // If dataset is "products", fetch updated products from data source case "products": lastRefreshTime = userContext as DateTime?; IList<Product> productsToRefresh = FetchUpdatedProducts(lastRefreshTime) as IList<Product>; // Insert updated products in the cache foreach (var product in productsToRefresh) { string key = $"ProductID:{product.Id}"; CacheItem cacheItem = new CacheItem(product); _cache.Insert(key, cacheItem); } break; // If dataset is "supplier", fetch updated suppliers from data source case "suppliers": lastRefreshTime = userContext as DateTime?; // fetch all suppliers updated since ‘lastRefreshTime’ and insert in cache. break; default: // Invalid dataset } // User context is the time at which datasets were refreshed userContext = DateTime.Now; return userContext; } |
반면에 캐시 데이터가 언제 만료될지 확신할 수 없는 경우 다음을 구현할 수 있습니다. 새로고침할 데이터 집합 가져오기 의 방법 ICacheLoader
프로그래밍 방식으로 변경된 데이터 세트를 찾아 새로 고칠 수 있는 인터페이스입니다. PowerShell을 사용할 수도 있습니다. RefresherDataset 호출 요청 시 캐시를 새로 고치는 cmdlet입니다.
1 |
public IDictionary<string, RefreshPreference> GetDatasetsToRefresh(IDictionary<string, object> userContexts); |
결론
캐시 로더는 더 이상 선택 사항이 아닙니다. 급변하는 경쟁 시대에 비즈니스의 앞면은 절대 내려갈 수 없기 때문에 고객을 전 세계로 확장하려는 기업에게는 반드시 필요한 기능입니다. 따라서 다음과 같은 분산 캐싱 솔루션을 찾고 있다면 NCache 귀하의 비즈니스 성장을 돕기 위해, 연락 기술 전문가가 도와드리겠습니다!