최신 애플리케이션은 일반적으로 대량의 데이터를 처리하고 생성합니다. 따라서 단일 웹 서버/데이터 소스가 실패하여 데이터가 손실될 가능성은 소프트웨어 개발자에게 흔한 악몽입니다. 그러나 모든 애플리케이션 서버 노드에 동일한 데이터 사본이 있는 경우 높은 데이터 가용성을 달성할 수 있습니다. 이 복제 프로세스는 클러스터에서 몇몇 노드가 실패하더라도 데이터 손실이 발생하지 않도록 보장합니다. 그러나 데이터가 확장되기 시작하면 어떻게 될까요? 이러한 경우 복제를 다이얼 백하고 데이터 분할을 시작해야 합니다.
NCache 분산형 메모리 내 캐싱 솔루션은 데이터 집약적 애플리케이션에 선형 확장성, 향상된 성능 및 고가용성을 제공합니다. 이를 통해 사용자는 데이터를 여러 개의 청크(버킷)로 나누어 다른 파티션에 배치하여 읽기 및 쓰기 작업 부하를 균등하게 분산할 수 있습니다. 또한, 파티션-복제본 토폴로지 클러스터의 각 노드에는 복제본이라고 하는 수동 파티션 역할을 하는 다른 파티션의 백업이 있습니다. 노드 장애가 발생하는 경우 캐시 클러스터는 손실된 파티션이 소유한 데이터가 복제본에서 여전히 사용 가능하다는 것을 알고 있습니다.
이는 데이터를 분할하여 초기 확장성 문제를 해결하고 Partition-Replica 토폴로지를 통해 높은 가용성을 제공하지만 정확히 어떻게 데이터를 동등하게 분할하고 어떤 효과가 있습니까? 이 블로그는 데이터 분할이 어떻게 이루어지는지에 대해 알려드리는 것을 목표로 합니다. NCache.
주요 요점
선형 확장성: NCache 데이터를 1,000개의 논리적 버킷으로 나누고, 이 버킷들을 클러스터의 모든 노드에 분산시켜 높은 확장성을 달성합니다.
결정론적 조회: 라운드 로빈 방식과 달리, NCache 해시 기반 파티셔닝을 사용합니다. 이를 통해 클라이언트는 분산 맵을 사용하여 데이터를 찾을 수 있습니다. O (1) 복잡성을 줄이고 비용이 많이 드는 방송 검색을 피합니다.
고가용성: 파티션-복제본 토폴로지를 통해 각 데이터 파티션은 다른 노드에 백업(복제본)을 가지므로 서버 장애 발생 시 데이터 손실이 발생하지 않습니다.
I지능형 재균형 조정: 노드가 네트워크에 참여하거나 네트워크를 떠날 때, 상태 전송 엔진은 필요한 버킷만 백그라운드에서 이동시킵니다. 이를 통해 네트워크 오버헤드를 최소화하고 캐시를 항상 최대 가용 상태로 유지할 수 있습니다.
자동 부하 분산: NCache 노드 간에 버킷 통계를 주기적으로 교환하여 항목 개수가 아닌 실제 부하 및 수량에 따라 데이터가 고르게 분산되도록 합니다.
균등한 데이터 분포를 위한 해시 기반 파티셔닝
대부분의 경우 애플리케이션은 데이터를 다른 파티션에 할당할 때 라운드 로빈 전략을 사용합니다. 이 접근 방식은 균등한 분배를 보장하지만 특정 데이터 항목을 찾는 데 어려움이 있습니다. 이러한 전략을 사용하면 항목 위치를 추적할 방법이 없기 때문에 데이터 검색 및 회수가 시간이 많이 걸리고 비효율적일 수 있습니다.
| 제품 특장점 | 라운드 로빈 | NCache 해시 기반 |
|---|---|---|
| 데이터 배치 | 순차적/순환적 | 결정론적(키-투-버킷) |
| 키 조회 | 브로드캐스트 검색(모든 노드에 문의) | 직접 접근 (배포 지도를 통해) |
| 조회 복잡도 | O (N) 클러스터 전체 | O (1) 클러스터 전체 |
| 재조정 | 단순, 간단, 편리 | 데이터 중심 및 자동화 |
이 문제를 해결하려면 NCache 통합 해시 기반 데이터 파티셔닝. 따라서 데이터는 버킷으로 분할되고 이후 여러 파티션에 분산됩니다. 목표는 클러스터의 모든 노드에 버킷을 균등하게 분산하여 성능을 최적화하고 고가용성을 보장하는 것입니다. 이를 달성하려면 NCache 각 데이터 항목을 항목 키에 따라 특정 버킷에 매핑하는 해싱 기술을 사용합니다. 따라서 버킷의 소유자를 알아내려면 항목 키에 해시 함수를 적용하고 총 버킷 수(1000)로 수정하기만 하면 됩니다.
분포 맵이란 무엇입니까?
코디네이터 서버 노드는 버킷 분배를 감독하고 각 항목이 키에 따라 특정 버킷에 할당되도록 보장하므로 분산 캐시 클러스터에서 필수적입니다. 이를 달성하기 위해 다음을 생성합니다. 분포도. 이 맵에는 버킷 분포가 포함됩니다. 그런 다음 이러한 버킷을 클러스터의 다른 모든 파티션과 적절한 경우 연결된 모든 클라이언트에 분배합니다.

그림 1: 데이터 중복성 NCache 파티션-복제본 토폴로지.
클러스터에 있는 서버 수에 상관없이 NCache 이 방법을 통해 각 항목에 일관된 버킷 주소가 지정되도록 합니다. 이는 클러스터의 서버 수가 변경되더라도 배포 맵이 일정하게 유지되기 때문입니다. 결과적으로 버킷이 어느 단계에서든 한 파티션에서 다른 파티션으로 이동하더라도 항목의 버킷 주소는 동일하게 유지됩니다. 이를 통해 데이터가 그대로 유지되고 버킷 이동 중에 데이터가 손실되지 않습니다.

그림 2 : NCache 동적 분포 맵을 사용하는 분할 토폴로지.
의 경우 분할된 토폴로지, 노드가 클러스터를 떠날 때마다 클러스터는 데이터 손실을 경험합니다. 떠나는 노드가 소유한 버킷은 모두 손실됩니다. 그러나 파티션-복제본복제본은 분포 맵을 기준으로 재분배되는 다른 노드에 존재하므로 데이터 손실을 방지할 수 있습니다.
분포도 기반 데이터 분포
데이터는 캐시 클러스터의 모든 노드에 균등하게 분산됩니다. NCache 동적 버킷 분배. 캐시 클러스터를 시작할 때 모든 1000개 버킷이 노드에 할당됩니다. 이는 모든 데이터가 단일 파티션에 저장되는 결과를 가져옵니다. 최상의 성능과 부하 분산을 제공하기 위해 클러스터에 노드가 더 추가되면 버킷이 파티션 전체에 균등하게 분배됩니다.
예를 들어, 두 번째 노드가 클러스터에 추가되면 1000개의 버킷이 두 파티션에 동등하게 나뉘고 각 분할에 500개의 버킷이 제공됩니다. 마찬가지로 세 번째 노드가 클러스터에 들어가면 버킷이 재분배되어 각 파티션에 각각 333, 333, 334개의 버킷이 제공됩니다.
건축적 통찰: 효율성 및 가용성
고정 버킷을 통한 일관성 있는 해싱: NCache 1,000개의 논리적 버킷으로 구성된 고정 맵을 사용합니다. 키-버킷 매핑이 고정되어 있으므로 노드를 추가하거나 제거할 때 전체 데이터의 일부만 이동하면 되므로 클러스터 전체의 재배열을 최소화할 수 있습니다.
배경 상태 전송: 데이터 재균형 조정은 비차단 상태 전송 엔진을 통해 이루어집니다. 이 프로세스는 필요한 버킷을 백그라운드에서 이동시켜 애플리케이션 성능에 미치는 영향을 최소화하면서 캐시를 클라이언트가 항상 완전히 사용할 수 있도록 보장합니다.

그림 3 : NCache 클러스터 노드 간 동적 버킷 분산.
버킷 분포는 파티션이 클러스터를 떠나면 다시 한 번 수정되어 데이터의 균등한 분포를 유지합니다. 예를 들어, 파티션이 333노드 클러스터를 종료하면 해당 파티션에 속하는 334개 또는 XNUMX개 버킷이 나머지 두 노드에 분산됩니다. NCache'의 상태 전송 메커니즘은 노드 간 데이터를 재조정하기 시작합니다. 이는 버킷 분포가 변경될 때마다 발생합니다. 이 설정은 데이터가 설정된 버킷 분포 전략에 따라 최적으로 분포되도록 보장합니다. 마찬가지로 클라이언트는 실행 중인 서버 노드와 해시 기반 분포에 대한 정보를 제공하는 분포 맵도 수신합니다.
데이터 로드 밸런싱
클러스터 전체에 버킷을 재분배하는 동안 NCache 데이터 중심 전략을 채택합니다. 이를 통해 각 파티션이 수신하는 데이터 양이 균형을 이룹니다. 클러스터의 각 파티션은 주기적으로 자신이 소유한 버킷의 통계를 클러스터의 다른 파티션과 교환합니다. 이를 통해 각 파티션이 소유한 데이터 양을 설명하는 균형 잡힌 분포 맵을 만들 수 있습니다. NCache 자동으로 데이터 균형 각 파티션이 동일한 양의 데이터를 받도록 합니다. 또한 사용자가 수동으로 데이터를 균형 있게 조정할 수 있습니다. 자세한 내용은 여기에서 읽을 수 있습니다. 여기에서 확인하세요.
맺음말
결론적으로 Partition-Replica를 사용하여 데이터를 분할합니다. NCache 애플리케이션 속도와 확장성을 개선하기 위한 효과적인 전략입니다. 데이터를 더 작은 세그먼트로 분할하고 여러 캐시 노드에 분산함으로써 성능 병목 현상의 위험을 줄이는 동시에 데이터 가용성을 보장할 수 있습니다.
자주 묻는 질문 (FAQ)
Q : 어떻게합니까? NCache 특정 데이터 항목을 소유하는 노드를 판별하는 방법은 무엇입니까?
A: NCache 항목의 키에 해시 함수를 적용한 다음 전체 버킷 수(1000)로 모듈로 연산을 수행합니다. 결과로 얻은 버킷 ID는 배포 맵과 상호 참조하여 특정 서버 파티션을 식별합니다.
질문: 클라이언트 애플리케이션이 서버 클러스터에 요청하지 않고 데이터를 찾을 수 있습니까?
A : 네. NCache 모든 연결된 클라이언트에 배포 맵을 직접 제공합니다. 이를 통해 클라이언트는 서버 노드의 정확한 위치를 로컬에서 계산하고 읽기 또는 쓰기 작업을 위해 해당 파티션으로 바로 이동할 수 있습니다.
Q: 파티션 토폴로지에서 노드가 이탈할 경우와 파티션-복제본 토폴로지에서 이탈할 경우 데이터에 어떤 변화가 발생하나요?
A: 일반적인 파티션 토폴로지에서는 기존 노드가 소유한 데이터가 손실됩니다. 하지만 파티션-복제본 토폴로지에서는 클러스터가 분산 맵을 기반으로 다른 노드에 있는 기존 복제본을 자동으로 활성 상태로 승격시켜 데이터 손실을 방지합니다.
Q : 않습니다 NCache 데이터 배포에 수동 개입을 허용하시겠습니까?
잠시 NCache 버킷 통계를 기반으로 데이터를 자동으로 균형 조정하며, 특정 관리 제어가 필요한 경우 사용자가 관리 센터 또는 PowerShell을 통해 수동으로 데이터를 균형 조정할 수 있는 유연성을 제공합니다.






