Skip to main content

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

1단계. 문제 이해 및 설계 범위 확정#

  • 다음의 설계 원칙을 예시로 들 수 있습니다.
    • ID는 유일해야 합니다.
    • ID는 숫자로만 구성되어야 합니다.
    • ID는 64비트로 표현될 수 있는 값이어야 합니다.
    • ID는 발급 날짜에 따라 정렬 가능해야 합니다.
    • 초당 10,000개의 ID를 만들 수 있어야 합니다.

2단계. 개략적 설계안 제시 및 동의 구하기#

  • 아래와 같은 선택지가 있습니다.
    • 다중 마스터 복제(multi-master replication)
    • UUID(Universally Unique Identifier)
    • 티켓 서버(ticket server)
    • 트위터 스노플레이크(twitter snowflake) 접근법

다중 마스터 복제#

  • 데이터베이스의 auto_increment 기능을 활용하는 것이나, 1만큼 증가가 아닌 k만큼 증가시킵니다.
  • 아래의 단점이 있습니다.
    • 여러 데이터 센터에 걸쳐 규모를 늘리기 어렵습니다.
    • ID의 유일성은 보장되나, 값이 시간 흐름에 맞추어 커지도록 보장할 수는 없습니다.
    • 서버를 추가하거나 삭제할 때도 잘 동작하도록 만들기 어렵습니다.

UUID#

  • UUID는 컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128비트짜리 수입니다.
  • 다음의 장점이 있습니다.
    • UUID를 만드는 것이 단순합니다. 서버 사이의 조율이 필요 없으므로 동기화 이슈도 없습니다.
    • 각 서버가 자기가 쓸 ID를 알아서 만드는 구조이므로 규모 확장도 쉽습니다.
  • 단점
    • ID가 128비트로 깁니다. 요구사항과 맞지않습니다.
    • ID를 시간순으로 정렬할 수 없습니다.
    • ID에 숫자(numeric) 아닌 값이 포함될 수 있습니다.

티켓 서버#

  • auto_increment 기능으 갖춘 데이터베이스 서버(티켓 서버)를 중앙 집중형으로 하나만 사용하는 것입니다.
  • 장점은 아래와 같습니다.
    • 유일성이 보장되는 오직 숫자로만 구성된 ID를 쉽게 만들 수 있습니다.
    • 구현하기 쉽고, 중소 규모 애플리케이션에 적합합니다.
  • 단점
    • 티켓 서버가 SPOF(Single-Point-of-Failure)가 됩니다.
    • 이 서버가 장애가 발생하면, 모든 시스템이 영향을 받습니다.

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

  • 이 요구사항에 맞는 방법입니다.
  • 생성해야 하는 ID의 구조를 여러 절(section)로 분할하는 것입니다.
    • 1비트: o
      • 1비트를 할당합니다.
    • 41비트: 타임 스탬프
      • 시각 이후 몇 밀리초가 경과했는지 나타내는 값입니다.
    • 5비트: 데이터센터 ID
      • 5비트를 할당합니다.(2^5=32개 데이터센터를 지원합니다.)
    • 5비트: 서버 ID
      • 5비트 할당(위와 같이, 데이터센터당 32개 서버를 사용할 수 있습니다.)
    • 12비트: 일련 번호
      • 각 서버에서 ID를 생성할 때마다 일련 번호를 1만큼 증가시킵니다.
      • 1밀리초가 경과할 때마다 0으로 초기화합니다.

3단계. 상세 설계#

타임스탬프#

  • 시간이 지날수록 점점 더 큰 값을 같습니다.
  • 최대 기간은 69년입니다. 이 기간이 지나면 오버플로가 발생하므로 시각을 바꾸거나 ID체계를 다른 것으로 이전해야 합니다.

일련번호#

  • 일련 번호는 12비트이므로, 2^12=4096개의 값을 가질 수 있습니다. 어떤 서버가 같은 밀리초 동안 하나 이상의 ID를 만들어 낸 경우에만 0보다 큰 값을 같게 됩니다.

4단계. 마무리#

  • 다음의 사항을 추가로 논의할 수 있습니다.
    • 시계 동기화(clock synchronization) : NTP(Network Time Protocol)과 같은 문제로 해결함
    • 각 절(section)의 길이 최적화: 동시성(concurrency)이 낮고 수명이 긴 애플리케이션이라면 일련번호 절의 길이를 줄이고 타입스탬프 절의 길이를 늘리는 것이 효과적일 수도 있습니다.
    • 고가용성(high availability): ID 생성기는 필수 불가결(mission critical) 컴포넌트이므로 아주 높은 가용성을 제공해야 합니다.
Last updated on