• 티스토리 홈
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
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 안정 해시 설계 1
        2022년 09월 03일
        • starryeye
        • 작성자
        • 2022.09.03.:50

        수평적 규모 확장성을 달성하기 위해서는 트래픽 또는 데이터를 서버에 균등하게 나누는 것이 중요하다.

         

        이를 위한 보편적 기술!

         

        안정 해시!

        (Consistence Hashing, 일관된 해싱이라 부르기도 함)

         

        안정 해시에 대해 알아보기 전, 해시 키 재배치 문제에 대해 알아보자.

        N개의 캐시 서버가 있으면, 가장 쉽게 떠오르는 부하 분산 방법은

        아래의 해시 함수를 이용하는 것이다.

        serverIndex = hash(key) % N

         

        위 방법은 서버 개수가 고정되어 있고 데이터 분포가 균등하다면 잘 동작한다.

         

        하지만...

        서버가 추가되거나 삭제된다면?

        N이 바뀌니까.. index가 확 바뀌고.. 대부분의 데이터가 재배치된다..

        데이터가 재배치 되면서 균등하지 않게 배치가 될 가능성이 존재한다.

        이는 곧바로 대규모 캐시 미스 현상이 나타나게 된다.

        (캐시 클라이언트가 데이터가 없는 엉뚱한 서버에 접속)

         

         

        위 문제를 해결하는 기술이 안정 해시다.

        안정 해시는 해시 테이블 크기가 조정(캐시 서버 수가 변경) 될 때..

        평균적으로 k/n개의 키만 재배치하는 기술이다.

        (k: key갯수, n: 슬롯 갯수)

         

         

        위 그림(해시 링)을 보며 이해 해보자.

        주의 점은 해시 함수는 단순하게 모듈러 연산을 사용하지 않는다.

        해시 링이란 해시 데이터 공간을 둥글게 원으로 구부린 가상 공간이라 생각하자

         

        server는 총 4개, key는 6개가 있는 상황이다.

        어떤 키가 저장되는 서버는,

        해당 키의 위치로 부터 시계 방향으로 링을 탐색해 나가면서 만나는 첫 번째 서버이다.

        key6은 server1에 매칭

        key1, 2는 server2에 매칭

        ...

         

         

        서버가 추가되는 상황을 생각해보자..

        key6과 server1 사이에 server5가 추가된다면..

        key6은 server5로 재배치가 이루어질 것이며, 다른 key는 재배치가 이루어지지 않게 된다.

         

        서버가 제거되는 상황을 생각해보자..

        server1이 제거된다면 key6만 server2로 재배치가 이루어지며,

        다른 키들은 재배치가 이루어지지 않는다.

         

        위와 같이..

        안정 해시는

        서버가 추가 또는 제거 되더라도 key의 재배치가 일부만 이루어지므로

        대규모 캐시 미스 현상은 일어나지 않는다.

         

         

         

         

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

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

        티스토리툴바