[System Design Interview] Ch.7 분산 시스템을 위한 유일 ID 생성기 설계

Yujeong·2026년 1월 20일
post-thumbnail

분산 시스템을 위한 유일한 ID 생성기

분산 시스템을 위한 유일한 ID 생성기는 여러 서버·노드가 동시에 동작해도 서로 충돌하지 않는 고유 식별자(ID)를 생성하는 메커니즘

[요구사항]
- 유일해야 함
- 정렬 가능해야 함
- 시간이 흐름에 따라 커지겠지만, 1씩 증가한다고 할 수는 없음
- 숫자로만 구성
- 64비트로 표현될 수 있는 값
- 초당 10,000개 생성할 수 있어야 함


선택지

다중 마스터 복제

  • auto_increment 활용
  • 데이터베이스 서버 수 k만큼 다음 ID 값을 구할 때 증가해서 얻음
    e.g. server1 → (1, 3, 5, …) → web server
    server2 → (2, 4, 6, …) → web server

단점

  • 여러 데이터 센터에 걸쳐 규모를 늘리기 어려움
  • ID 유일성은 보장되겠지만 그 값이 시간 흐름에 맞춰 커지도록 보장할 수 없음
  • 서버를 추가하거나 삭제할 때도 잘 동작하게 만들기 어려움

UUID

장점

  • UUID를 만드는 것 단순 → 서버 사이의 조율이 필요 없으므로 동기화 이슈 없음
  • 각 서버가 자기가 쓸 ID를 알아서 만드는 구조이므로 규모 확장 쉬움

단점

  • ID가 128비트로 길다
  • ID를 시간순으로 정렬할 수 없음
  • 숫자가 아닌 값이 포함될 수 있음

티켓서버

  • auto_increment 기능을 갖춘 데이터베이스 서버(티켓 서버)를 중앙 집중형으로 하나만 사용하는 것

장점

  • 유일성이 보장되고, 숫자로만 구성된 ID를 만들 수 있음
  • 구현하기 쉽고, 중소 규모 애플리케이션에 적합

단점

  • 티켓 서버가 SPOF(Single-Point-of-Failure)가 됨 이 이슈를 피하려면 티켓 서버를 여러 대 준비해야 함. 그러나, 그렇게 하면 데이터 동기화 같은 새로운 문제가 발생할 수 있음

트위터 스노플레이크

  • 생성해야 하는 ID 구조를 여러 섹션(section)으로 분할하는 것
    0타임스탬프데이터센터 ID서버 ID일련번호
    1비트41비트5비트5비트12비트
  • 사인(sign): 음수와 양수 구별
  • 타임스탬프(timestamp): 기원 시각 이후로 몇 밀리초가 경과했는지
  • 데이터센터 ID: 25=322^5=32개 데이터 지원
  • 서버 ID: 데이터센터당 25=322^5=32개 서버 사용 가능
  • 일련번호: 각 서버에서는 ID를 생성할 때마다 일련번호를 1만큼 증가시키고, 이 값은 1밀리초가 경과할 때마다 0으로 초기화됨

상세 설계

타임스탬프

  • 타임스탬프는 ID의 가장 중요한 41비트를 차지하며, 시간이 흐름에 따라 점점 큰 값을 갖게 되므로 ID는 시간순으로 정렬 가능함
  • 41비트로 표현할 수 있는 밀리초는 약 69년이므로, 기원 시각을 정하고 69년이 지나면 기원 시각을 바꾸거나 ID 체계를 다른 것으로 이전해야 함

일련번호

  • 12비트이므로 212=40962^{12}=4096개의 값을 가질 수 있으며, 어떤 서버가 같은 밀리초 동안 하나 이상의 ID를 만들어 낸 경우에만 0보다 큰 값을 갖게 됨

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

profile
공부 기록

0개의 댓글