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

가상면접으로 배우는 대규모 시스템 설계 기초

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

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

  • 다중 마스터 복제(multi-master replication)
    • 데이터 베이스의 auto_increment 기능을 활용함, 서버 마다 증가하는 값을 다르게 셋팅함
    • 단점
      • 여러 데이터 센터에 걸쳐 규모를 늘리기 어렵다
      • ID의 유일성은 보장되겠지만 그 값이 시간 흐름에 맞추어 커지도록 보장할수 없다
      • 서버를 추가하거나 삭제할때 잘 동작하도록 만들기 어렵다
  • UUID(universally unique identifier)
    • 유일성이 보장되는 ID를 만드는 간단한 방법
    • 장점
      • 만드는것이 단순하다 서버사이에 조율이 필요없고 동기화 이슈도 없다
      • 각 서버가 자기가 쓸 ID를 알아서 만드는 구조이며 확장도 쉽다
    • 단점
      • ID가 128바이트로 길다
      • ID를 시간순으로 정렬할 수 없다
      • ID에 숫자아닌 값이 포함될 수 있다
  • 티켓 서버(ticket server)
    • 키를 만들어내는 중앙집중식 서버를 한대만 사용하는것
    • 장점
      • 유일성이 보장 되는 오직 숫자로만 구성된 ID를 쉽게 만들 수 있다
      • 구현하기 쉽고 중소 규모 애플리케이션에게 적합
    • 단점
      • 티켓 서버가 SPOF 가 된다 해당 시스템이 장애면 해당 시스템을 사용하는 모든서버가 영향을 받음
  • 트위터 스토우플레이크(Snowflake) 접근법
    • 사인 비트 + 타임스탬프 + 데이터센터 ID + 머신 ID + 일련 번호
    • 사인 비트 : 1 비트 할당
    • 타임 스템프 : 41 비트 할당
    • 데이터 센터 ID : 5 비트 할당 32개 데이터 센터를 지원
    • 서버 ID : 5 비트 할당, 데이터센터당 32개 서버를 지원
    • 일련번호 : 12 비트 할당, 1밀리초가 경과될때 0으로 초기화

추가 논의 사항

  • 시계 동기화
    • NTP
  • 각 섹션의 길이 최적화
    • 동시성이 낮고 수명이 긴 애플리케이션이라면 일련번호 섹션의 길이를 줄이고 타임스탬프 섹션의 길이를 늘리는 방법

참조