우리가 뛰어 들기 전에 클라이언트 캐시, 조금 축소하고 캐싱의 기본 사항을 이해합시다. 컴퓨팅에서 캐시는 값비싼 데이터 트립을 방지하고 단일 서버 노드에서 실행되는 단순한 애플리케이션의 성능을 최적화하기 위해 보조 저장소로 사용되는 고속 메모리입니다. 그러나 부하 분산 분산 시스템에서는 단일 요청이 여러 애플리케이션 노드에서 처리됩니다. 여기서 캐시가 성능 저하를 유발합니다.
이러한 긴급성을 해결하기 위해 인메모리 분산 캐시가 초당 극도의 트랜잭션 로드를 처리하고 고가용성 및 선형 확장성.
개발자는 다음과 같이 시장에서 사용 가능한 많은 인기 있는 분산 캐싱 옵션 중에서 선택할 수 있습니다. NCache. NCache 애플리케이션 데이터를 캐시하여 값비싼 데이터베이스 여행을 줄이고 응답 시간을 개선하는 매우 빠르고 선형적으로 확장 가능한 인메모리 분산 캐시입니다. 그러나 이 모든 것에도 불구하고 캐시 위에 캐시를 추가하여 가능하게 할 수 있는 성능 향상의 여지는 여전히 있습니다.클라이언트 캐시.
NCache 세부 정보 .NET의 분산 캐싱 고가용성 NCache
클라이언트 캐시는 어떻게 작동합니까? NCache?
대부분의 경우 분산 캐시는 네트워크의 전용 캐시 서버 세트에서 호스팅되므로 애플리케이션은 데이터를 가져오기 위해 네트워크를 이동해야 합니다. 이는 로컬 및 애플리케이션 프로세스 내에서 데이터에 액세스하는 것만큼 빠르지 않습니다.
이 문제를 처리하려면 NCache 제공 클라이언트 캐시. 클라이언트 캐시는 애플리케이션 프로세스 근처에 있는 임시 저장소로 작동하므로 데이터 가져오기가 더 쉽고 빠릅니다. 클라이언트 캐시는 동일한 클라이언트 시스템에서 실행되는 여러 애플리케이션이 다음을 사용하여 통신하고 데이터를 공유할 수 있으므로 애플리케이션의 성능을 더 높은 수준으로 끌어 올립니다 아웃프로크 모드. 클라이언트 캐시는 애플리케이션 프로세스 내부에서도 핫 데이터 세트를 애플리케이션에 더 가깝게 가져옵니다. InProc 모드 엄청난 성능 향상을 제공합니다.
In NCache, 클라이언트 캐시를 사용하는 것은 매우 간단합니다. 애플리케이션 끝에서 코드를 변경할 필요가 없습니다. 간단한 구성 옵션입니다. 다음을 통해 클라이언트 캐시를 생성할 수 있습니다. NCache 웹 관리자 또는 NCache-지원되는 PowerShell cmdlet. 클라이언트가 구성되면 클라이언트 응용 프로그램에서 자동으로 클라이언트를 사용하기 시작합니다.
전자 상거래 응용 프로그램의 예를 통해 클라이언트 캐시(첫 번째 수준 또는 L1 캐시라고도 함)의 작동을 이해해 보겠습니다. 애플리케이션은 현재 활성 사용자의 제품 카탈로그 및 데이터에 자주 액세스합니다. 이러한 데이터는 클라이언트 상자(응용 프로그램이 있는 위치)에서 실행되는 클라이언트 캐시에 보관할 수 있습니다. 따라서 클러스터된 캐시(두 번째 수준 또는 L2 캐시라고도 함)를 통한 네트워크 트립을 피할 수 있고 L1 캐시에서 훨씬 빠르게 데이터가 제공됩니다.
이제 응용 프로그램이 항상 L1 캐시에서 업데이트된 데이터로 제공되도록 두 캐시 간에 데이터를 동기화하는 방법에 대해 생각해야 합니다.
L1 및 L2 캐시 간의 데이터 동기화
애플리케이션이 항상 최신 데이터를 얻도록 하기 위해 두 개의 백그라운드 스레드가 클라이언트 캐시에서 작동합니다. 클라이언트 캐시에서 실행되는 이 두 가지 강력한 동기화 메커니즘은 애플리케이션이 성능과 확장성을 추가하여 항상 최신 데이터를 얻을 수 있도록 합니다. 두 개의 백그라운드 스레드는 다음과 같습니다.
알림 기반 스레드
L1 캐시에 데이터가 추가되면 즉시 데이터 변경 알림을 등록하고 L2 캐시는 L1 캐시가 보유하고 있는 캐시 항목을 추적하고 데이터 업데이트/제거 변경이 발생할 때 변경 사항을 모니터링합니다. L2 캐시의 데이터가 수정되면 L1 캐시는 변경 알림을 수신하고 이에 대한 응답으로 L1 캐시는 L2와 동기화됩니다.
폴링 기반 스레드
이것은 네트워크 결함 또는 연결 손실로 인해 L1 캐시와 L2 캐시 간의 통신이 중지된 경우에만 트리거되는 폴백 메커니즘입니다. 이 경우 L1 Cache는 10초 동안 기다린 후 자체 폴링하여 L2 Cache에 데이터 변경 사항을 요청합니다. 변경 알림을 받으면 L2 캐시와 동기화됩니다.
클라이언트 캐시의 이점을 최대한 활용하려면 사용 가능한 두 가지 프로세스 수준 격리 모드 중 하나에서 이를 사용할 수 있습니다.
클라이언트 캐시의 격리 모드
클라이언트 캐시 애플리케이션이 실행 중인 클라이언트 노드에서 실행됩니다. 성능 요구 사항과 애플리케이션 아키텍처에 따라 클라이언트 캐시에서 지원하는 다음 프로세스 수준 격리 모드 중 하나를 선택할 수 있습니다. NCache 클라이언트 캐시는 InProc 및 OutProc의 두 가지 모드로 존재합니다.
InProc 모드:
In InProc 모드, 클라이언트 캐시는 응용 프로그램 프로세스 내에서 실행되어 프로세스 간 통신을 제거합니다. InProc 모드는 데이터가 객체 형태로 남아 있기 때문에 애플리케이션에 최대 성능을 제공하여 비용을 절감합니다. 직렬화 및 역직렬화.
InProc 모드에서는 다른 애플리케이션 인스턴스 간의 데이터가 공유되지 않으므로 애플리케이션의 각 인스턴스는 성능을 향상시키는 전용 클라이언트 캐시 인스턴스를 호스팅합니다.
OutProc 모드:
In 아웃프로크 모드, 클라이언트 캐시는 클라이언트 노드의 전용 프로세스에서 실행됩니다. 애플리케이션과 클라이언트 캐시 간의 통신은 TCP 소켓을 통해 발생합니다. OutProc 모드는 데이터 공유를 지원하므로 여러 애플리케이션 인스턴스가 동일한 클라이언트 캐시와 통신할 수 있습니다. 데이터가 여러 응용 프로그램 간에 공유되므로 한 응용 프로그램에서 로드하거나 업데이트한 데이터를 다른 응용 프로그램에서 사용할 수 있기 때문에 한 가지 주요 이점이 있습니다.
InProc 및 OutProc 모드의 성능 비교:
InProc 및 OutProc 모드의 성능을 측정하는 데에는 데이터 가용성, 리소스 소비 및 속도와 같은 여러 요소가 있습니다.
데이터 가용성: OutProc 모드에서 캐시 재시작은 데이터 안정성을 제공하는 데이터 손실을 초래하지 않습니다. 반면 InProc 모드에서는 캐시를 다시 시작하면 데이터가 손실됩니다.
리소스 소비: InProc 모드는 각 클라이언트 캐시 인스턴스가 데이터 복사본을 보유하므로 메모리와 같은 리소스가 제한되지 않을 때 최대 성능을 제공합니다. OutProc 모드는 InProc 모드에 비해 더 적은 물리적 리소스를 필요로 합니다.
속도 : Client Cache InProc 모드는 힙에 있는 개체와 같기 때문에 매우 빠르며 역직렬화된 방식으로 항목을 유지하여 비용을 절감합니다. 직렬화/역직렬화 OutProc 또는 캐시에 대한 원격 액세스에 대해 수행해야 합니다.
NCache 세부 정보 클라이언트 캐시 캐시의 이벤트 알림
Client Cache의 운영 흐름
클라이언트 캐시는 응용 프로그램 계층에 더 가깝고 클라이언트 캐시는 클러스터된 캐시의 하위 집합입니다. 따라서 모든 작업은 분산 방식으로 발생합니다.
모든 키 기반 읽기 작업은 L1 캐시에서 직접 수행되며 추가, 삽입 및 제거와 같은 키 기반 쓰기 작업은 먼저 L2 캐시에서 수행된 다음 애플리케이션으로 돌아가기 전에 L1 캐시에 추가됩니다.
데이터는 응용 프로그램으로 반환되기 전에 L1 Cache로 반환되어 다음에 동일한 데이터가 요청될 때 L1 Cache에서 직접 제공됩니다.
키 기반이 아닌 읽기 및 쓰기 작업은 L2 캐시가 L1 캐시의 하위 집합을 보유하기 때문에 L2 캐시에서만 수행됩니다.
다른 클라이언트 캐시 인스턴스는 백그라운드 데이터를 통해 업데이트됩니다. 동기화 메커니즘.
클라이언트 캐시의 동기화 모드:
애플리케이션에 로컬인 동안 클라이언트 캐시는 독립 실행형이 아닙니다. 대신 항상 클러스터된 캐시와 동기화됩니다. 이렇게 하면 클라이언트 캐시의 데이터가 오래되지 않습니다.
NCache 클라이언트 캐시는 두 가지 모드를 제공합니다. 데이터 동기화 클라이언트 캐시와 클러스터 캐시 사이. 클라이언트 캐시는 클러스터된 캐시 데이터의 복사본을 보유합니다. 클러스터된 캐시에서 발생하는 모든 변경 사항은 애플리케이션 계층이 클라이언트 캐시와 직접 통신하기 때문에 클라이언트 캐시에서 동기화되어야 합니다. 데이터 동기화를 위한 두 가지 모드는 낙관적 및 비관적입니다.
낙관적 모드 의 데이터 동기화를 위한 기본 모드입니다. NCache. 동기화는 백그라운드에서 이루어지며 애플리케이션이 데이터를 요청하면 클라이언트 캐시에서 애플리케이션으로 반환됩니다.
더 민감하고 새로운 데이터 사용이 필요한 애플리케이션 비관적 모드 데이터 동기화를 위해. 응용 프로그램이 데이터를 요청하면 L1 캐시가 L2 캐시로 버전을 확인하고 업데이트된 데이터를 제공합니다.
결론
NCache 분산 캐시와 함께 클라이언트 캐시를 활용할 수 있습니다. 클라이언트 캐시 사용의 가장 좋은 점은 사용자 측에서 프로그래밍이 수행되지 않는다는 것입니다. 간단한 구성 설정이며 클라이언트 캐시가 자동으로 연결됩니다. 클라이언트 캐시는 쓰기보다 읽기를 더 많이 수행하는 애플리케이션의 성능을 여러 배로 향상시킵니다. 따라서 완전히 작동하는 60일 평가판을 다운로드하십시오. NCache Enterprise 그리고 직접 사용해 보세요.