← 질문 목록
#55깊이 0
노드를 늘릴 때 일관된 해싱이 필요한 이유는?
나머지 연산으로 나누면 노드가 하나 늘 때 거의 모든 키가 옮겨 가기 때문이다. 캐시라면 그 순간 적중률이 0에 가까워진다.
| 기준 | 나머지 연산 | 일관된 해싱 |
|---|---|---|
| 노드 추가 시 이동 | 거의 전부 | 1/n만 |
| 구현 | 간단하다 | 링과 가상 노드가 필요 |
| 분포 | 고르다 | 가상 노드로 보정한다 |
노드가 늘거나 줄어도 키 일부만 옮긴다. 고전적인 구현은 키와 노드를 같은 링 위에 올린다. 키는 시계 방향으로 처음 만나는 노드가 맡는다. 노드가 빠지면 그 구간만 다음 노드로 넘어간다.
노드 수가 적으면 구간 크기가 들쭉날쭉해진다. 그래서 노드 하나를 링 위 여러 지점에 올리는 가상 노드를 쓴다.
일관된 해싱은 분산 캐시와 샤딩, 세션 고정에 쓰인다. 분산 캐시와 샤딩이 대표적이고, 로드 밸런서의 세션 고정에도 같은 원리가 들어간다.