최신 애플리케이션은 대량의 데이터를 처리하고 생성합니다. 단일 웹 서버/데이터 소스에 오류가 발생하여 응용 프로그램과 귀중한 데이터가 손실될 가능성은 소프트웨어 개발자들 사이에서 흔히 발생하는 악몽입니다. 그러나 모든 서버 노드에 동일한 데이터 복사본이 있는 경우 높은 데이터 가용성을 얻을 수 있습니다. 이는 클러스터에서 몇 개의 노드가 실패하더라도 데이터 손실이 없음을 의미합니다. 그러나 데이터가 크게 확장되기 시작하면 어떻게 될까요? 이와 같은 경우 복제를 다이얼백하고 데이터 분할을 시작해야 합니다.
NCache 분산 및 메모리 내 캐싱 솔루션은 데이터 집약적인 애플리케이션에 높은 확장성, 성능 및 가용성을 제공합니다. POR(분할된 복제본) 토폴로지를 사용하여 데이터를 여러 청크(버킷)로 나누고 서로 다른 파티션에 배치합니다. 읽기 및 쓰기 로드를 고르게 분산시키기 위해 데이터는 여러 노드에 걸쳐 분할됩니다. 이것은 데이터를 분할하여 확장성을 달성하는 초기 문제를 해결하지만 데이터가 정확히 어떻게 균등하게 분할됩니까? 이 블로그는 데이터 분할이 어떻게 발생하는지 교육하는 것을 목표로 합니다. NCache.
균등한 데이터 분포를 위한 해시 기반 파티셔닝
종종 다양한 응용 프로그램은 라운드 로빈 전략을 사용하여 데이터를 다른 파티션에 할당합니다. 이 접근 방식은 균등한 배포를 보장하지만 특정 데이터 항목을 찾는 데 문제가 있습니다. 데이터 검색은 항목 위치를 추적할 방법이 없기 때문에 시간이 많이 걸리고 비효율적일 수 있습니다.
이 문제를 해결하려면 NCache 통합 해시 기반 파티셔닝. 데이터는 이후에 여러 파티션에 분산되는 많은 버킷으로 분할됩니다. 목표는 성능을 최적화하고 고가용성을 보장하기 위해 클러스터의 노드 전체에 버킷을 고르게 분산시키는 것입니다. 이를 달성하기 위해, NCache 항목의 키를 기반으로 각 데이터 항목을 특정 버킷에 매핑하는 해싱 기술을 사용합니다. 이제 버킷의 소유자를 파악하려면 항목 키에 해시 함수를 적용하고 총 버킷 수로 수정해야 합니다. 총 1000개의 버킷이 있습니다.
분포 맵이란 무엇입니까?
코디네이터 서버는 버킷 배포를 감독하고 각 항목이 해당 키를 기반으로 특정 버킷에 할당되도록 하기 때문에 분산 캐시 클러스터에서 필수적입니다. 이를 달성하기 위해 코디네이터 서버는 분포도 버킷 배포를 포함하여 클러스터의 다른 모든 파티션과 연결된 모든 클라이언트에 배포합니다.
클러스터에 있는 서버 수에 상관없이 NCache 이 방법을 통해 각 항목에 일관된 버킷 주소가 부여되는지 확인합니다. 이는 분포도 클러스터의 서버 수가 변경되더라도 일정하게 유지됩니다. 따라서 어떤 단계에서 버킷이 한 파티션에서 다른 파티션으로 이동하더라도 항목의 버킷 주소는 동일하게 유지됩니다. 이렇게 하면 데이터가 그대로 유지되고 버킷 이동 중에 데이터가 손실되지 않습니다.
분할된 토폴로지의 경우 노드가 클러스터를 떠날 때마다 클러스터에서 데이터 손실이 발생합니다. 떠나는 노드가 소유한 버킷은 모두 손실됩니다. 그러나 POR의 경우 복제본은 다른 노드에 존재합니다. redis분포도를 기반으로 데이터 손실을 방지합니다.
분포도 기반 데이터 분포
에서 제공하는 동적 버킷 분산 전략 덕분에 캐시 클러스터의 모든 노드에 데이터가 균등하게 분산됩니다. NCache. 캐시 클러스터를 시작할 때 1000개의 버킷이 모두 노드에 할당되어 모든 데이터가 단일 파티션에 저장됩니다. 최상의 성능과 로드 밸런싱을 제공하기 위해 더 많은 노드가 클러스터에 추가될 때 버킷이 파티션 전체에 균등하게 분할됩니다.
예를 들어 1000개의 버킷은 두 번째 노드가 클러스터에 추가될 때 두 파티션 간에 균등하게 분할되어 각 분할에 500개의 버킷이 제공됩니다. 마찬가지로 세 번째 노드가 클러스터에 진입하면 버킷은 redis그에 따라 각 파티션에 333, 333 및 334 버킷을 제공합니다.
파티션이 클러스터를 떠나면 버킷 배포가 한 번 더 수정됩니다. 예를 들어 데이터의 균일한 분포를 유지하기 위해 파티션이 333노드 클러스터를 종료할 때 해당 파티션에 속하는 334개 또는 XNUMX개의 버킷이 나머지 두 노드에 분산됩니다. NCache의 상태 전송 메커니즘은 버킷 분포가 변경될 때마다 노드 간에 데이터를 재조정하여 버킷 분포에 따라 데이터가 최적으로 분포되도록 합니다. 마찬가지로 클라이언트는 실행 중인 서버 노드와 해당 해시 기반 배포에 대해 알려주는 배포 맵도 받습니다.
데이터 로드 밸런싱
DaVinci에는 redis캐시 클러스터의 노드 주변에 버킷 할당, NCache 각 파티션이 수신하는 데이터의 양이 균형을 이루도록 데이터 중심 전략을 취합니다. 이를 달성하기 위해 클러스터의 각 파티션은 자신이 소유한 버킷의 통계를 클러스터의 다른 파티션과 주기적으로 교환합니다. 이를 통해 균형 잡힌 분포도 각 파티션이 보유한 데이터의 양을 설명합니다. NCache 자동으로 데이터 균형 각 파티션이 동일한 데이터 공유를 받도록 합니다. 또한 수동으로 데이터 균형을 맞출 수 있습니다. 당신은 그것에 대해 더 읽을 수 있습니다 여기에서 지금 확인해 보세요..
결론
결론적으로 POR을 활용하여 데이터를 NCache 응용 프로그램의 속도와 확장성을 향상시키는 데 유용한 기술입니다. 데이터를 더 작은 조각으로 나누고 이를 여러 캐시 노드에 분산하여 데이터를 항상 사용할 수 있고 성능 병목 현상의 가능성을 줄일 수 있습니다.