가상 면접 사례로 배우는 대규모 시스테 설계 기초 #5 (안정 해시 설계)

박주진·2022년 5월 14일
0
  • 데이터를 서버에 균등 배분하기 위해서 주로 사용되는 기술
  • 수평적 규모 확작성을 달성하기 위해서는 매우 중요하다

서버의 부하를 균등하게 나누는 가장 보편적인 방법

  • hash(key) % N (서버의 갯수)

단점

  • 해시 키 재배치 문제
    • 서버 추가 또는 삭제로 갯수의 변경이 일어나면 기존 대부분의 캐시를 재분배해야 한다.

안정해시

  • 서버 추가 또는 제거 상황시 오직 일부 키만 재배치하는 해시 기술
  • 해시링을 만들어 해시 함수를(modular 연산을 사용하지 않고) 사용하여 링 위 특정 위치에 대응 시키는 방법이다.
  • 키의 위치로부터 시계 방향으로 링을 탐색하면서 만나는 첫 번째 서버에 키를 할당하는 방법
  • 중간에 서버가 추가 삭제되어도 일부만 재배치하여 해결할 수 있다.
    자세한 설명

존재하는 문제점

  • 기존 보편적인 방식과 동일하게 일부 서버가 추가나 삭제되면 특정 서버의 파티션이 커질 수 있다.
  • 기존 보편적인 방식과 동일하게 키의 균등 분포를 달성하기 어렵다.

해결법

가상 노드
  • 실제 서버를 가르키는 가상 노드를 추가한다.
  • 가상 노드 개수가 늘어나면 각각 노드가 커버하는 범위가 점점 더 균등해진다.

마치며

  • 안정해시는 서버 추가 및 삭제시 재배치 되는 키의 수가 최소화 된다.
  • 데이터가 보다 균등하게 분포되어 수평적 규모 확장성을 달성하기 쉽다.
  • 데이터가 좀더 균등하게 분배됨으로 특정 노드나 샤드에 접근이 몰릴 가능성이 줄어든다. (핫스팟 키 문제)

추가

  • 표준편차가 작아져서 데이터가 고르게 분배된다? 표준편차가 작다는 말은 평균(이상적으로 정확하게 분배된값)에 가깝게 데이터들이 분배될 거라는뜻
  • 구체적인 안정해시 코드 단위로 설계하는법?
    자바 구현체 링크
  • 왜 데이터가 균등하게 분배되어 있으면 수평적 규모 확장성을 달성하기 쉬운가?
    • 데이터가 균등하게 배포되어 있으면 -> 재샤딩 필요성이 줄어듬 (핫스팟 키 문제, 특정 한 서버만 저장소가 고갈되는 문제 등으로 인해)-> 수평적 규모 확장이 쉽다?
  • 안전해시란 가상 노드까지 적용한 모델을 지칭하는건가?

0개의 댓글