공통/인프라 & 시스템 설계

[대규모 시스템 설계 기초 정리] 분산 시스템 유일 ID 생성기

반응형

요구사항

  • ID는 유일해야 하며 숫자로만 이루어짐
  • 64비트로 표현 가능해야 하며, 발급 날짜에 따라 정렬이 가능해야 한다
  • 초당 10,000개의 ID를 만들 수 있어야 한다.


분산 시스템에서 유일성이 보장되는 ID를 만드는 방법

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


다중 마스터 복제

  • 데이터베이스의 auto_increment 기능을 활용하는 것
  • ID의 값을 1만큼 증가시켜 얻는 것이 아니라, 현재 사용 중인 데이터베이스의 서버의 수인 k만큼 증가시켜 얻는 접근법
  • 어느 정도 규모 확장성 문제를 해결할 수 있는 반면 다음과 같은 한계가 존재한다.
    • 여러 데이터센터에 거쳐 규모를 늘리기 어렵다
    • ID의 유일성을 보장할 수는 있지만, 시간 흐름에 맞추어 커지도록 보장할 수 없다.
    • 서버를 추가하거나 삭제할 때 대응이 어렵다.


UUID

  • UUID는 컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128비트짜리 수다.
  • UUID 값은 충돌 가능성이 지극히 낮다.

장점

  • UUID를 만드는 것은 단순하며 규모 확장도 쉽다.


단점

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


티켓 서버

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

장점

  • 유일성이 보장되는 오직 숫자로만 구성된 ID를 쉽게 만들 수 있다.


단점

  • 티켓 서버가 SPOF가 된다.
    • 티켓 서버를 여러 대로 분산시키면, 데이터 동기화와 같은 새로운 문제가 발생


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

ID의 구조

  • Sign 비트(1비트)
  • 타임스탬프 (41비트)
    • 기원시간 (epoch) 이후로 몇 밀리초 경과했는지를 나타내는 값
  • 데이터센터 ID (5비트)
    • 32개의 데이터 센터를 지원할 수 있다.
  • 서버 ID (5비트)
    • 데이터 센터 당 32개 서버를 사용할 수 있다.
  • 일련번호 (12비트)
    • 각 서버에서는 ID를 생성할 때마다 일련번호를 1만큼 증가시킨다.
    • 1밀리 초가 경과할 때마다 0으로 초기화된다.
반응형