- 수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나누는 것이 중요하다.
해시 키 재배치(rehash) 문제
- 나머지 연산으로 해시를 배치하는 것은 데이터 분포가 균등할 떄만 잘 동작한다.
- 또한, 서버가 추가되거나 기존 서버가 삭제되면 대부분의 키가 재분배된다.
안정 해시
- 안정 해시: 해시 테이블 크기가 조정될 떄 평균적으로 k/n개의 키만 재배치하는 기술
- k: 키의 개수
- n: 슬롯의 개수
기본 구현법
해시 함수를 사용해서 서버 IP나 이름으로 링 위에 서버를 배치한다.
해시 키도 똑같이 배치한다.
어떤 키가 저장되는 서버는, 해당 키의 위치로부터 시계 방향을 링을 탐색해나가면서 만나는 첫 번째 서버다.
아래와 같이 서버를 추가하거나 삭제해도 키 일부만 재배치하면 된다.
- 문제점 2가지
- 서버를 추가/삭제할 떄, 파티션의 크기를 균등하게 유지하는게 불가능하다.
- 키의 균등 분포를 달성하기가 어렵다.
가상 노드
- 하나의 서버가 링 위에 여러 개의 가상 노드를 가진다.
- 가상 노드의 개수를 늘리면 키의 분포가 균등해진다.
- 가상 노드의 개수가 늘어날수록 균등해지지만, 가상 노드 데이터를 저장할 공간이 많아진다.