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

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

  • ID 특성
    • 유일성, 정렬 가능
  • 새로운 레코드의 ID의 증가 값
    • 증가 값이 1씩 증가하지는 않지만, 과거의 값보다 나중에 만든 값이 더 큰 ID를 갖는다.
  • ID는 숫자로 구성
  • 시스템 규모

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

  • 분산 시스템에서 유일성이 보장되는 ID 생성 방법
    • 다중 마스터 복제(multi-master replication)
    • UUID(Universally Unique Identifier)
    • 티켓 서버(ticket server)
    • 트위터 스노플레이크(twitter snowflake) 접근법

  • 다중 마스터 복제

  • 데이터 베이스의 auto_increment 기능을 활용한다.
  • 증가 값은 k만큼 증가
  • k = 현재 사용 중인 데이터베이스 서버 수
  • 단점
    • 여러 데이터 센터에 걸쳐 규모를 확장하기는 어렵다.
    • ID 유일성은 보장되지만, 시간 흐름에 맞추어 커지도록 하기에는 힘들다.
    • 서버 추가나 삭제할 때에도 잘 동작하기 힘들다.

  • UUID

  • 컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128비트 수
  • 서버 간 조율 없이 독립적으로 생성 가능
  • 각 웹 서버는 별도 ID 생성기로 독립적인 ID 생성이 가능하다.
  • 장점
    • UUID 만드는 것이 간단하고, 동기화 이슈도 없다.
    • 규모 확장이 간단하다.
  • 단점
    • ID가 128비트이기 때문에 길다.
    • ID 시간순 정렬이 어렵다.
    • ID에 숫자가 아닌 값이 포함된다.

  • 티켓 서버

  • auto_increment 기능을 갖춘 데이터베이스 서버(티켓 서버)를 중앙 집중형으로 하나만 사용한다.
  • 장점
    • 유일성이 보장되는 숫자 ID를 간단하게 만들 수 있다.
    • 규모가 적은 애플리케이션에 적합
  • 단점
    • 티켓 서버가 SPOF(Single-Point-of-Failure)
    • 장애가 발생하면, 해당 서버를 사용하는 모든 시스템에 영향을 끼친다.

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

  • ID를 바로 생성하기 전에, divide and conquer 적용
  • sign : 음수, 양수 구분
  • timestamp : 기원 시각(epoch) 이후로 몇 밀리초가 경과했는지 나타내는 값
  • 데이터센터 ID
  • 서버 ID
  • 일련번호 : 각 서버에서 ID 생성할 때마다 일련 번호를 1씩 증가

+ Recent posts