- 수평적 규모 확장성을 달성하기 위해선 요청/데이터를 서버에 균등 분배하는 것이 중요
- 안정 해시 (Consistent Hash) 는 이를 위한 대표적인 기술
- 가장 간단하게 사용되는 전통적인 해싱 방법은 mod 연산
serverIndex = hash(key) % N
- 이는 서버 풀의 크기가 고정되어 있고, 데이터 분포가 균등한 경우 잘 동작함
- 하지만 서버가 추가되거나 삭제되면 모든 해시값이 바뀌게 되는 단점이 있음
- 안정 해시는 이를 효과적으로 해결하는 기술
- wikipedia: 안정 해시는 해시 테이블 크기가 조정될 때 평균적으로 오직 k/n개의 키만 재배치하는 해시 기술
- k는 키의 개수, n은 슬롯의 개수
- 안정 해시 알고리즘은 MIT에서 처음 제안되었고, 기본 절차는 아래와 같음
- 서버와 키를 균등 분포 해시 함수를 사용해 해시 링에 배치
- 키의 위치에서 링을 시계 방향으로 탐색하다 만나는 첫 서버가 키가 저장될 서버
- 위 케이스에서 발생 가능한 2개의 문제점
- 서버 추가/삭제 경우 파티션 크기의 균등 유지가 불가
- 키의 균등 분포 어려움
- 이런 문제점들을 해결하기 위해 가상 노드 (virtual node) 또는 복제 (replica) 의 기법 등장
- 가상 노드는 실제 노드 또는 서버를 가리키는 노드
- 하나의 서버는 링 위에 여러개의 가상 노드를 가질 수 있으며, 결과적으로 각 서버는 여러개의 파티션을 관리하게 됨
- 키의 위치로부터 시계방향으로 링을 탐색하다 만나는 최초의 가상 노드가 해당 키가 저장될 서버의 위치
- 가상 노드의 개수를 늘릴수록 키의 분포는 더 균등해지는 경향이 있음
- 하지만 그렇다고 가상 노드의 개수를 너무 늘리면 데이터 저장 공간이 더 필요하기 때문에 trade off 발생
- 안정 해시를 사용하는 대표적인 케이스
- Amazon dynamo DB
- Apache Cassandra
- Akamai CDN
- 안정 해시의 이점 요약
- 서버가 추가/삭제될 때 재배치되는 키의 수가 최소화
- 데이터가 보다 균등 분포되므로 수평적 규모 확장 달성 쉬움
- 핫스팟 키 문제 줄여줌 (특정 샤드에 트래픽이 몰리는 것)