Post

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 정리 7장 분산 시스템을 위한 유일 ID 생성기 설계

가상 면접 사례로 배우는 대규모 시스템 설계 기초 리뷰

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 정리 7장 분산 시스템을 위한 유일 ID 생성기 설계

가상 면접 사례로 배우는 대규모 시스템 설계 기초

7장 분산 시스템을 위한 유일 ID 생성기 설계

개략적인 설계안 제시 및 동의 구하기

유일성이 보장되는 ID를 만드는 방법은 여러 가지이다. 다음과 같은 선택지가 있다.

  • 다중 마스터 복제
  • UUID
  • 티켓 서버
  • 트위터 스노플레이크 접근법

    다중 마스터 복제

다음 ID값을 구할 때 K만큼 증가한다. K는 데이터베이스 서버의 수 이다. ID값의 유일성을 보장하기위해 여러 데이터베이스에 위치한 모든 ID값을 모두 다르게 처리하는 방법,

  • 서버를 확장하거나 삭제할 때 K의 변동이 계속 있다.
  • 여러 데이터센터에 걸친 확장이 어렵다.
  • 만약 시간 순서로 ID값이 커지는 구조로 설계해야한다면 보장받을 수 없는 구조이다.

    UUID

컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128비트짜리 수다.

(중복 UUID 1개가 생길 확률을 50%까지 끌어 올리려면 초당 10개의 UUID를 100년동안 계속 만들어야한다고 밝혔다.)

UUID 값은 09c93e62-80b4-468d-bf8a-c07e1040bfb2 같은 형태이다.

  • UUID는 단순하다
  • 각 서버에 자기가 쓸 ID를 독립적으로 생산 가능하여 규모확장도 쉽다.
  • 하지만 128비트로 길다.
  • ID를 시간순서로 정렬할 수 없다.
  • 숫자가 아닌 문자가 포함된다.

    티켓 서버

티켓 서버는 웹 서버와 연동된 하나의 중앙식 티켓서버가 ID를 배정하는 방식이다.

  • 유일성 보장, 구현 쉽다.
  • SPOF문제

    트위터 스노플레이크 접근법

먼저 64비트의 ID 구조를 설명한다.

1비트( 사인 ) + 41비트 (타임스탬프) + 데이터센터ID(5비트) + 서버ID(5비트) + 일련번호 (12비트)

처음 사인은 나중을 위해 유보하는 비트로 음수와 양수를 구분하는데 사용할 수 있다.

상세 설계

위에서 본 트위터 스노플레이크 접근법이 가장 이상적이라 책에서는 밝히고 있다. 상세 설계에서는 타임스탬프와 일련번호 등 한계치를 미리 접근해야한다. 예를들어

  • 타임스탬프는 2^41 - 1 = 2199023255551 밀리초가 최대값이다. 약 69년동안 타임스탬프가 작동한다는 의미이다. 따라서 69년뒤 오버플로가 발생하기 떄문에 대비해야한다.
  • 일련번호는 2^12 = 4096개의 값이다. 타임스탬프는 밀리초 단위이기 떄문에 특정 한 서버가 만약 1밀리초 동안 4096개 이상의 서버를 만들면 오버플로이다.
This post is licensed under CC BY 4.0 by the author.