• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 안정 해시 설계 2
        2022년 09월 03일
        • starryeye
        • 작성자
        • 2022.09.03.:16

        안정 해시에 대해 더 깊게 알아보자.

        (Consistence Hashing, 일관된 해싱)

         

        안정 해시 알고리즘은 MIT에서 처음 제안 되었다.

         

        안정 해시 알고리즘의 기본 절차는 다음과 같다.

        1. 서버와 키를 균등 분포 해시 함수를 사용하여 해시 링에 배치한다.

        2. 키의 위치에서 링을 시계 방향으로 탐색하다 만나는 최초의 서버가 키가 저장될 서버이다.

         

        위 절차는 문제점이 있다..

        1. 서버가 추가되거나 삭제되는 상황에서 각 서버에 매핑될 파티션 크기를 균등하게 유지할 수가 없다..

        -> 서버가 하나 제거된다면 제거된 서버의 매핑 공간은 다음 서버에 추가되므로

        -> 서버간 매핑 공간은 불균형을 이루게 된다.

         

        2. 키의 균등 분포를 달성하기 어렵다.

        -> 서버가 추가되거나 삭제되는 상황이 지속되면..

        -> 어떤 하나의 서버 공간은 지나치게 많고.. 어떤 서버는 정말 좁은 현상이 나타날 수 있다.

        -> 이에 따라.. 키의 균등 분포가 이루어 지지 않을 가능성이 높다.

         

         

        문제점을 해결해보자.

        가상 노드

        해시 링위에 A server에 대한 노드를 1개만 둘 것이 아니라..

        여러개의 노드를 둔다.

        server1에 대한 노드가 총 3개, server2에 대한 노드도 총 3개이다.

        가상 노드의 개수를 늘리면 키의 분포는 점점 더 균등해질 것이다.

        (표준 편차가 작아져서 데이터가 균등하게 분포됨.)

        -> 서버가 제거(or 추가) 되더라도 가상노드가 많아서..

        -> 하나의 큰 파티션이 다음 서버의 파티션으로 추가되는 현상은 없어진다.

        -> 잘게 쪼개진 파티션들이 각각 다음 서버의 파티션으로 추가 될 것이다.

         

        주의점

        가상 노드를 늘리면 그만큼 가상 노드 데이터를 저장할 공간은 늘어난다.

        (tradeoff)

         

         

         

        마지막으로 안정 해시의 장점에 대해 서술하며 정리해보자.

        1. 서버가 추가되거나 삭제될 때 재배치되는 키의 수가 최소화 된다.

        2. 데이터가 보다 균등하게 분포하게 되므로 수평적 규모 확장성을 달성하기 쉽다.

        3. 핫스팟 키 문제를 줄인다.

        -> 특정한 샤드에 대한 접근이 지나치게 빈번하면 서버 과부하 문제인데..

        -> 안정 해시는 데이터를 좀 더 균등하게 분배하므로 이런 문제의 가능성을 줄인다.

         

         

        어디에 사용되고 있는가..

        Amazon DynamoDB

        Apache Cassandra

        Discord

        Akamai CDN

        Meglev

         

        '대규모 시스템 설계' 카테고리의 다른 글

        Saga Pattern (feat. MSA)  (0) 2023.02.13
        Two Phase Commit (feat. MSA)  (0) 2023.02.13
        안정 해시 설계 1  (0) 2022.09.03
        사용자 수에 따른 규모 확장성 5  (0) 2022.07.23
        사용자 수에 따른 규모 확장성 4  (0) 2022.07.23
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바