일관 해싱은 이동량을 줄이지만 부하 균형을 보장하지 않는다
노드 변경 시 키 재배치 범위와 가상 노드의 역할, 부하 제한형 변형의 비용을 구분한다.
발행·오류 제보: infostoa · 편집 기준
이 글의 개별 작성자와 전문 검토자 정보는 제공되지 않습니다.
해시 링이 줄이는 재배치
일관 해싱은 키와 서버를 같은 해시 공간에 놓고, 키에서 링을 따라 정해진 방향으로 처음 만나는 서버를 담당자로 선택하는 방식이다. 서버가 추가되거나 빠질 때 일반적인 고정 모듈로 해싱처럼 대부분의 키가 다른 서버로 다시 매핑되는 상황을 줄이는 것이 목적이다. 하지만 “항상 정확히 1/N의 키만 이동한다”는 법칙은 아니다. 실제 이동 비율은 노드 수, 링에 놓은 토큰, 가중치, 키 분포, 장애 복구 규칙에 따라 달라진다.
가상 노드와 실제 운영 선택
Dynamo 논문은 물리 노드 하나가 링의 여러 위치를 차지하는 가상 노드 설계를 사용한다. 이는 용량이 다른 서버에 여러 토큰을 배정하거나, 각 노드가 여러 구간을 나눠 맡도록 해 표본 편차를 줄이는 데 도움이 된다. 다만 토큰 수를 늘리면 링 메타데이터와 재균형 작업량도 늘 수 있고, 키마다 한 번의 균등한 부하를 보장하지 않는다. 노드가 받는 요청 비용이 서로 다르거나 특정 키가 뜨거우면, 해시 공간상 균등해도 실제 CPU·대역폭 부하는 쏠릴 수 있다.
데이터 복제는 별도 정책
Dynamo는 담당 구간의 다음 노드들에 복제하는 방식과 가용성 복구 메커니즘을 함께 설명하지만, 일관 해싱 자체가 복제·합의·강한 일관성을 제공하는 것은 아니다. 복제 계수, 읽기·쓰기 쿼럼, 장애 시 임시 저장과 복구는 제품의 데이터 모델과 운영 목표에 맞춰 정해야 한다. 캐시라면 오래된 항목의 만료와 미스 폭주를, 저장소라면 복제본 동기화와 재배치 중 데이터 보존을 별도로 다뤄야 한다.
기본 링의 부하 한계
Google Research의 Vahab Mirrokni와 Morteza Zadimoghaddam은 기본 일관 해싱이 동적 배정에서 이동량을 줄이는 대신 최악 부하 균형은 무작위 배정 수준에 머물 수 있다고 분석했다. 두 연구자는 평균 대비 용량 상한을 둔 bounded-load 알고리즘을 제안했고 Google Cloud Pub/Sub 적용 경험도 보고했다. 이 결과는 모든 링 구현이 자동으로 같은 상한을 얻는다는 뜻이 아니다. 서버 증감으로 이동량을 작게 유지하는 목표와 과부하를 막는 목표 사이의 설계 절충이며, 상한을 강제하려면 추가 배정 규칙과 상태가 필요하다.
적용 전 점검
노드 수만으로 예상 이동량을 단정하지 말고, 실제 키·요청 분포로 리밸런싱을 시험한다. 가상 노드 수, 서버별 가중치, 장애 중 복제 대상 변경, 핫키 완화, 재배치 속도 제한을 함께 계측해야 한다. 여기서 전문가 관점은 Google 연구자들의 bounded-load 분석과 배포 보고를 가리키며, 일반 링의 수학적 보장을 대신하지 않는다.