대규모 시스템 설계 기초 - 분산 시스템을 위한 유일 ID 생성기 설계

Huisu·2025년 3월 4일
0

Article

목록 보기
8/9
post-thumbnail

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

개략적 설계

💬 다중 마스터 복제

이 방법은 데이터베이스의 auto increment를 사용하는 방법입니다. 다만 ID 값을 증가시킬 때 1만큼 증가시키는 것이 아니라, 분산 데이터 서버의 수만큼 증가시킵니다. 따라서 k개의 간격을 둔 데이터들끼리 한 서버에 저장되는 방식입니다. 하지만 이 방법은 다음과 같은 중대한 단점을 가지고 있습니다.

  1. 여러 데이터 센터에 걸쳐 규모를 늘리기 어렵다.
  2. ID의 유일성은 보장되겠지만 그 값이 시간 흐름에 맞추어 커지도록 보장할 수는 없다.
  3. 서버를 추가하거나 삭제할 때도 잘 동작하도록 만들기 어렵다.

💬 UUID

UUID는 유일성이 보장되는 ID를 만드는 또 하나의 간단한 방법입니다. UUID는 컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128짜리 수입니다. UUID 값은 충돌 가능성이 지극히 낮습니다. 위키피디아를 인용하면 중복 UUID는 서버 간 조율 없이 독립적으로 생성이 가능해, 규모 확장도 쉽습니다. 하지만 UUID는 다음과 같은 단점을 가집니다.

  1. 128비트로 매우 길다.
  2. ID를 시간순으로 정렬할 수 없다.
  3. ID에 숫자가 아닌 값이 포함될 수 있다.

💬 티켓 서버

티켓 서버는 auto increment 기능을 갖춘 데이터베이스 서버, 즉, 티켓 서버를 중앙 집중형으로 하나만 사용하는 것이다. 티켓 서버는 유일성이 보장되는 오직 숫자로만 구성된 ID를 쉽게 만들 수 있고 구현이 쉬워서 중소 규모 애플리케이션에 적합하다. 하지만 티켓 서버의 단점은 다음과 같다.

  1. 이 서버에 장애가 발생하면 해당 서버를 이용하는 모든 시스템이 중단된다.

💬 트위터 스노플레이크

트위터 스노플레이크 기법은 우리가 생성해야 하는 ID의 구조를 여러 절로 분할한다.

사인 비트타임스탬프데이터센터 ID서버 ID일련번호
  • 사인 비트: 음수와 양수를 구별하는 데에 사용한다.
  • 타임스탬프: 41비트를 할당하고 기원 시각 이후로 몇 밀리초를 지났는지 나타낸다.
  • 데이터센터 ID: 5비트를 할당하기에 32개의 데이터센터를 지원할 수 있다.
  • 서버 ID: 5비트를 할당하여 데이터센터당 32개의 서버를 사용할 수 있다.
  • 일련번호: 12비트를 할당하여 각 서버에서는 ID를 생성할 때마다 이 번호를 1만큼 증가시킨다. 이 값은 1밀리초가 경과할 때마다 0으로 초기화된다.

0개의 댓글