책정리/대규모 시스템 설계 기초

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

뽀글보리 2023. 12. 2. 08:54
반응형

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

만약 분산 시스템을 위해 여러 데이터베이스 서버를 사용한다면, 관계형 데이터베이스의 auto_increment 속성을 사용할 수 없다.

유일 ID 생생기 요구사항

- ID 유일한 숫자값

- 계속 커지는 값이어야 한다.

- 초당 10000개의 ID를 만들 수 있어야 합니다.

유일 ID 생성기를 만드는 방법

다중 마스터 복제

데이터베이스의 auto increment 기능을 활용하지만, 1만큼 증가시키는 것이 아니라 k만큼 증가시킨다. 데이터베이스가 총 2대일 때, 데이터베이스1에서는 아이디를 1, 3, 5로 정하고 데이터베이스 2에서는 2, 4, 6과 같이 아이디를 정하는 방법이다.

이 경우 ID 유일성은 보장되겠지만, 시간 흐름에 맞추어 커지도록 보장할 수 없다. 또, 확장성의 면에서 여러 데이터 센터에 걸쳐 규모를 늘리기는 어렵고, 서버 추가/삭제할 때 동작하도록 하기 어렵다.

 

UUID

 

128비트짜리 수, 충돌 가능성이 지극히 낮다. 09c93e62-50b4-468d-bf8a-c07e1040bfb2와 같은 형태로 키를 만든다.

  • 장점
    • 단순하며, 서버 사이의 조율이 필요 없다, 동기화 이슈도 없다.
    • 규모 확장이 쉽다.
  • 단점
    • ID가 128비트로 길다.
    • ID를 시간순으로 정렬할 수 없다
    • 숫자가 아닌 값이 포함된다

티켓 서버

auto increment 기능을 가진 데이터서비스 서버를 중앙 집중형으로 하나만 사용하는 것이다. 모든 서버가 이 티켓 서버를 바라보도록 만든다. 그렇다면 유일성이 보장되고, 숫자로만 구성된 id를 만들 수 있다.

그러나 티켓 서버가 spof가 된다. 이 서버에 장애가 발생하면 모든 시스템이 영향을 받는다.

 

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

 

64비트를 할당하여 다음과 같은 정보를 담는다.

  • 1비트 : sign bit, 음수 또는 양수를 구분하는 데 사용한다.
  • 41비트: 타임스탬프 millisecond, 시간에 흐름에 따라 커지므로, 시간순서로 정렬가능하게 된다. 최대 69년까지 작동 가능
  • 5비트: 데이터센터ID, 총 32개의 데이터 센터를 지원할 수 있다.
  • 5비트: 서버 아이디, 데이터 센터당 32개의 서버를 사용할 수 있다.
  • 12비트: 일련번호, 서버에서 같은 타임스탬프에 ID를 생성할 때마다 이 일련번호를 증가시킨다. 1밀리초가 경과할 때마다 0으로 초기화된다.

마무리

요구사항을 모두 만족하기 위해서는 트위터 스노플레이크 접근법을 사용하는 것이 좋겠다. 이때 추가적으로 다음을 살펴본다.

  • ID 생성 서버들이 전부 같은 시계를 사용하는가?
  • 동시성이 낮고 수명이 긴 애플리케이션이라면 일련번호에 할당된 비트를 더 줄이고 타임스탬프에 할당된 비트를 더 늘리는 것은 어떨까?
  • 고가용성에 대하여 언급하기, ID 생성기는 필수 불가결 컴포넌트이므로 아주 높은 가용성을 제공해야 한다.

* 가상 면접 사례로 배우는 대규모 시스템 설계 기초 7장을 정리한 내용입니다.

반응형

'책정리 > 대규모 시스템 설계 기초' 카테고리의 다른 글

웹 크롤러 설계  (0) 2023.12.04
URL 단축기 설계  (2) 2023.12.03
키-값 저장소 설계  (1) 2023.12.01
해시 링을 사용한 안정 해시 설계  (3) 2023.11.30
처리율 제한 장치의 설계  (0) 2023.11.27