가상면접으로 배우는 대규모 시스템 설계 기초
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
- 각 섹션의 길이 최적화
- 동시성이 낮고 수명이 긴 애플리케이션이라면 일련번호 섹션의 길이를 줄이고 타임스탬프 섹션의 길이를 늘리는 방법