클라이언트 캐시
NCache 클러스터 토폴로지는 애플리케이션에 최고의 성능과 확장성을 제공하기 위한 것입니다. 비즈니스 요구 사항이 증가함에 따라 애플리케이션은 더 많은 클라이언트 요청과 데이터를 처리해야 합니다. 분산 캐시에 더 많은 노드를 추가하면 선형 확장성이 원활하게 제공됩니다. 하드웨어 프로세서 캐시와 마찬가지로 클라이언트 캐시는 애플리케이션 프로세스 내부에서도 핫 데이터 세트를 애플리케이션에 더 가깝게 가져옴으로써 애플리케이션 성능을 더 높은 수준으로 끌어올립니다. InProc 모드.
전자상거래 애플리케이션의 예를 생각해 보세요. 애플리케이션은 현재 활성 사용자의 제품 카탈로그와 데이터에 자주 액세스합니다. 이러한 데이터는 클라이언트 상자에서 실행되는 클라이언트 캐시에 보관될 수 있습니다. 한편으로는 이 데이터를 클라이언트 캐시에 보관하면 데이터베이스 및 클러스터 캐시로의 이동을 방지하여 애플리케이션 성능이 향상됩니다. 반면에 클러스터 캐시가 더 많은 요청을 처리할 수 있도록 하여 클러스터 캐시에서 많은 읽기/쓰기 작업을 오프로드합니다. 그리고 이러한 성능 향상은 데이터 일관성을 저하시키지 않고 이루어집니다. 클라이언트 캐시는 해당 데이터를 클러스터 캐시와 동기화된 상태로 유지합니다. 클라이언트 캐시가 클러스터 캐시와 동기화하는 방법은 다음 섹션에서 설명됩니다.
플러그 앤 플레이: 클라이언트 캐시를 사용하는 것은 매우 간단합니다. 애플리케이션 끝에서 코드를 변경할 필요가 없습니다. 간단한 구성 옵션입니다. 다음을 통해 클라이언트 캐시를 생성할 수 있습니다. NCache 관리 센터 또는 NCache 지원되는 Powershell cmdlet. 클라이언트가 구성되면 클라이언트 애플리케이션이 자동으로 클라이언트를 사용하기 시작합니다. 이미 실행 중인 애플리케이션의 경우 애플리케이션을 다시 시작해야 합니다.
All CRUD 작업 캐시 키를 입력으로 사용하는 추가, 돈을 받아가세요, 끼워 넣다및 제거, 클라이언트 캐시를 통해 라우팅됩니다. 읽기 작업은 먼저 클라이언트 캐시 내부의 데이터를 찾습니다. 클라이언트 캐시는 데이터를 반환합니다(발견된 경우). 그렇지 않으면 클러스터 캐시에 대해 읽기 작업이 실행됩니다. 클러스터 캐시에서 반환된 데이터는 클라이언트 캐시에 추가된 후 애플리케이션에 반환됩니다. 따라서 동일한 데이터에 대한 다음 읽기 호출은 클라이언트 캐시에서 제공됩니다. 대량 읽기 작업의 경우 클라이언트 캐시에 누락된 데이터만 클러스터 캐시에서 가져옵니다.
다음과 같은 키 기반 쓰기 작업 추가 와 끼워 넣다, 클러스터 캐시에서 먼저 수행됩니다. 성공적으로 완료되면 데이터가 클라이언트 캐시에 추가된 다음 애플리케이션으로 전달됩니다. 다른 클라이언트 캐시 인스턴스는 백그라운드 데이터 동기화 메커니즘을 통해 업데이트됩니다. 나중에 설명.
클라이언트 캐시는 클러스터 캐시 데이터의 하위 집합만 보유합니다. 따라서 다음과 같은 키 기반이 아닌 다른 모든 작업은 그룹 가져오기, SQL 쿼리및 GetByTags등의 작업은 클러스터 캐시에서 직접 수행됩니다.
클라이언트 캐시: 격리 모드
클라이언트 캐시는 애플리케이션이 실행 중인 클라이언트 노드에서 실행됩니다. 성능 요구 사항과 애플리케이션 아키텍처에 따라 클라이언트 캐시에서 지원하는 다음 프로세스 수준 격리 모드 중 하나를 선택할 수 있습니다.
진행 중
이름에서 알 수 있듯이 클라이언트 캐시는 애플리케이션 프로세스 내에서 실행되어 프로세스 간 통신을 제거합니다. 역직렬화 비용을 피하기 위해 사용자 데이터는 개체 형식으로 유지됩니다. 이 모드는 애플리케이션에 최대 성능을 제공합니다. 클라이언트 캐시는 애플리케이션 프로세스 내에서 호스팅되므로 클라이언트 캐시 내부의 데이터는 다른 애플리케이션 인스턴스 간에 공유되지 않습니다. 애플리케이션의 각 인스턴스는 전용 클라이언트 캐시 인스턴스를 호스팅합니다. InProc 모드는 최대 프로세스를 제공하지만 다음과 같은 경우에만 적합합니다.
애플리케이션 핫 데이터 세트가 너무 크지 않습니다.
애플리케이션에는 충분한 물리적 메모리가 있는 각 클라이언트 노드에 몇 개의 인스턴스만 있습니다. 각 클라이언트 캐시 인스턴스는 해당 데이터 복사본을 보유한다는 점을 기억하세요.
응용 프로그램 수명 주기는 클라이언트 캐시의 이점을 얻을 수 있을 만큼 충분히 깁니다. 클라이언트 캐시 수명 주기는 응용 프로그램의 수명 주기에 따라 다릅니다. 애플리케이션이 다운되면 클라이언트 캐시 내의 모든 데이터도 손실됩니다. 수명 주기가 짧은 응용 프로그램은 클라이언트 캐시가 완전히 채워지기 전에 종료되거나 다시 시작됩니다.
각 애플리케이션에는 다른 애플리케이션과 다른 자체 핫 데이터 세트가 있습니다.
아웃프로크
이 모드는 클라이언트 캐시에 대한 프로세스 수준 격리를 제공합니다. 클라이언트 캐시는 클라이언트 노드의 전용 프로세스에서 실행됩니다. 애플리케이션은 TCP 소켓을 통해 클라이언트 캐시와 통신합니다. 여러 애플리케이션 인스턴스가 동일한 클라이언트 캐시와 통신할 수 있으므로 데이터를 공유할 수 있습니다. InProc은 성능 면에서 OutProc 모드를 능가하지만 OutProc 모드에는 고유한 장점이 있습니다.
동일한 클라이언트 시스템에서 실행되는 여러 애플리케이션은 동일한 클라이언트 캐시와 통신합니다. 여러 응용 프로그램이 데이터를 공유합니다. 한 응용 프로그램에서 로드하거나 업데이트한 데이터를 다른 응용 프로그램에서 사용할 수 있게 됩니다.
응용 프로그램을 다시 시작해도 클라이언트 캐시 데이터가 손실되지 않습니다.
각 애플리케이션 프로세스가 클라이언트 캐시의 복사본을 보유할 때 InProc 모드에 비해 OutProc 모드에서 클라이언트 캐시를 실행하는 데 RAM 및 CPU와 같은 물리적 리소스가 덜 필요합니다.
클라이언트 캐시 데이터(나중에 설명)를 클러스터 캐시와 동기화하면 클라이언트 시스템당 단일 클라이언트 캐시 인스턴스를 실행하므로 클러스터 캐시에 대한 부담이 줄어듭니다.
주의 사항
OutProc 클라이언트 캐시가 다운되면 애플리케이션은 클러스터 캐시에서 작업을 직접 수행합니다. 클라이언트 캐시가 다시 시작되면 자동으로 클라이언트 캐시에 연결됩니다. 다음을 설정하여 이 동작을 변경할 수 있습니다. skip-client-cache-if-unavailable
에 깃발 클라이언트.ncconf. 플래그가 다음으로 설정된 경우 false
, 클라이언트 캐시가 다운되면 캐시 작업이 실패합니다.
클러스터 캐시와 데이터 동기화
간편한 플러그 앤 플레이 설정에도 불구하고 클라이언트 캐시가 클러스터 캐시 데이터의 복사본을 보유하고 있다는 사실을 무시할 수 없습니다. 클러스터 캐시의 데이터에 대한 변경 사항은 클라이언트 캐시에 전파되어야 합니다. 특정 클러스터 캐시에 대해 InProc 또는 OutProc 모드로 실행되는 여러 클라이언트 캐시가 존재할 수 있습니다. 클라이언트 애플리케이션에 의한 데이터 변경은 애플리케이션이 연결된 클라이언트 캐시 인스턴스에서 수행됩니다. 따라서 이 클라이언트 캐시 인스턴스는 자동으로 동기화됩니다. 그러나 클라이언트 캐시의 다른 인스턴스는 이러한 변경 사항을 인식하지 못합니다. 클러스터 캐시 데이터에 대한 변경 사항은 아래 설명된 백그라운드 데이터 동기화 메커니즘을 통해 이러한 클라이언트 캐시 인스턴스와 동기화됩니다.
클라이언트 캐시에 데이터가 추가되면 지정된 데이터에 대한 클러스터 캐시에 데이터 변경 알림을 등록합니다.
클러스터 캐시는 각
CacheItem
클라이언트 캐시가 데이터에 대한 변경 사항을 보유하고 모니터링합니다.전용 백그라운드 작업자 스레드는 매초마다 데이터 변경 사항을 검사하고 변경 사항을 알려야 하는 클라이언트 캐시를 결정합니다. 영향을 받는 클라이언트 캐시에 데이터가 변경되었다는 알림을 보냅니다.
클라이언트 캐시에서 실행되는 또 다른 전용 백그라운드 작업자 스레드는 데이터 변경 알림을 받으면 데이터 변경 사항을 클러스터 캐시와 동기화하는 역할을 담당합니다. 알림을 받으면 즉시 클러스터 캐시를 요청하고 데이터 업데이트를 요청합니다. 우리는 이 동기화 메커니즘을 클라이언트 캐시 폴링이라고 부릅니다.
클라이언트 캐시에서 실행되는 이 작업자 스레드는 클라이언트 캐시와 클러스터 캐시 간의 연결 끊김으로 인해 알림을 놓친 경우를 처리하기 위해 클러스터 캐시로부터 알림을 받지 못한 경우 10초마다 데이터 변경 사항을 폴링합니다.
이 강력한 동기화 메커니즘은 추가된 성능 및 확장성과 함께 클라이언트 응용 프로그램이 항상 클라이언트 캐시의 최신 데이터로 제공되도록 합니다.
동기화 모드
백그라운드 데이터 동기화 메커니즘과 함께 클라이언트 캐시는 다음 두 가지 동기화 모드를 지원합니다.
낙관적 동기화
이것은 클라이언트 캐시의 기본 동기화 모드입니다. 애플리케이션이 클라이언트 캐시에서 데이터를 가져오고 클라이언트 캐시가 해당 데이터를 보유하는 경우 데이터는 단순히 애플리케이션으로 반환됩니다. 동기화는 위에서 설명한 것처럼 백그라운드에서 수행됩니다.
비관적 동기화
백그라운드 동기화 메커니즘은 대부분의 애플리케이션에 적합하며 애플리케이션에 최적의 성능과 확장성을 제공합니다. 그러나 더 민감하고 항상 최신 데이터가 제공되도록 하려는 애플리케이션의 경우 비관적 모드가 설계되었습니다. 이 모드를 사용하면 애플리케이션이 클라이언트 캐시에서 데이터를 가져오고 클라이언트 캐시가 해당 데이터를 보유할 때 클라이언트 캐시는 클러스터 캐시를 사용하여 항목 버전을 확인합니다. 업데이트된 버전의 데이터가 클러스터 캐시에서 발견되면 이를 가져와 클라이언트 캐시로 업데이트합니다. 따라서 응용 프로그램은 최신 버전을 얻을 수 있도록 보장됩니다. CacheItem
.