1. Consistent Hashing이란?
일관된 해싱(Consistent Hashing)은 분산 시스템에서 데이터를 여러 노드에 효율적으로 분배하면서 노드를 추가하거나 삭제할 때 데이터 재배치를 최소화하는 방식입니다.
1.1 핵심 특징
해시 테이블의 크기가 변할 때, 평균적으로 K/n의 키만 재매핑하면 됩니다.
K: 전체 아이템(키) 개수
n: 전체 노드 개수
재매핑 비율: K/n (전체의 1/n만 이동)
노드나 슬롯의 개수가 바뀔 때, 노드를 추가하거나 삭제할 때, 오직 K/n의 아이템만 다시 섞으면 됩니다.
기존 해싱과의 차이
기존 해싱:
- 슬롯(노드)의 개수 변화 시 거의 모든 키가 재매핑 필요
- 키와 슬롯 간 매핑이 모듈러 연산(
hash(key) mod n)으로 정의되기 때문
Consistent Hashing:
- 노드 변경 시 K/n개의 키만 재매핑
- 나머지 데이터는 그대로 유지
2. 사용되는 상황
2.1 분산 캐싱
Consistent Hashing은 분산 캐싱을 위해 개발되었습니다.
- 변화하는 웹 서버 수에 대응: 서버 추가/제거 시에도 안정적으로 요청 분산
- 부분적 장애 완화: 일부 서버 장애가 전체 시스템에 미치는 영향 최소화
- 강력한 캐시 활용: 시스템 전반의 장애 없이 캐시 시스템 운영
2.2 분산 해시 테이블 (DHT)
분산 해시 테이블(Distributed Hash Table) 디자인에 적용할 수 있습니다.
- 키 공간 파티셔닝: 분산된 노드들 사이에서 전체 키 공간을 파티셔닝
- 오버레이 네트워크: 노드들을 연결하여 키를 효과적으로 위치시킬 수 있는 네트워크 제공
3. 필요성
3.1 기존 방식의 문제점
일반적으로 n개의 캐싱 서버를 로드밸런싱하는 방법은 모듈러 해싱을 사용합니다:
서버 선택 = hash(데이터) mod n
문제점:
캐싱 서버가 늘어나거나 줄어들면 n이 바뀌면서 모든 데이터들이 새로운 곳에 해시되어야 합니다.
초기: 3개 서버 (n=3)
- key1 → hash(key1) mod 3 = 1 → 서버 1
서버 추가: 4개 서버 (n=4)
- key1 → hash(key1) mod 4 = 2 → 서버 2 (변경!)