Share
Sign In

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

1. 다중 마스터 복제

새로운 레코드를 만들 때마다 k(서버 수)만큼 증가한 값을 ID로 쓴다.
서로 영향을 끼치지 않고 ID를 만들기 때문에 성능이 보장된다.
단점
여러 데이터 센터에 걸쳐 규모를 늘리기 어렵다.
서버의 추가 및 삭제가 어렵다.
ID가 시간 흐름에 맞추어 커지도록 보장할 수 없다.

2. UUID (Universally Unique Identifier)

충돌 가능성이 지극히 낮은 128비트 문자열
서버의 조율 없이 각자 만들 수 있다.
장점
단순하고 동기화 이슈가 없다.
확장에 용이하다.
단점
128비트로 비교적 길다.
시간과 연관성이 없다.
숫자만 있지 않고 문자도 포함된다.

3. 티켓 서버

ID를 만드는 서버를 따로 두고 이 서버에서 DB에게 ID값을 준다.
장점
유일성이 보장된다.
단점
SPOF 문제 발생
티켓 서버를 여러 대 두면 동기화 문제 발생

4. 트위터 스노우플레이크

패킷 구성하듯 64비트를 여러 구역으로 쪼개서 값을 부여한다.
01 sign bit : 일단 예약 비트이다.
41 timestamp : epoch(아무 시간이나 정함) 이후 millisecond
05 datacenter id : 총 32개의 데이터센터를 표시
05 server id : 데이터센터당 32개의 서버를 표시
12 serial number : 각 서버에서 이 숫자를 1씩 증가
특징
타임스탬프가 제일 앞에 있기 때문에 시간에 따른 정렬이 가능하다.
타임스탬프는 2^{41}-1 밀리초, 즉 69년만 측정 가능하다.
일렬번호가 의미하는 것 : 한 서버가 1ms 내에 최대 2^12개의 ID를 만들 수 있다.
동시성이 적은 어플리케이션의 경우 일렬번호를 줄일 수 있다.
또 데이터센터와 서버 수도 적절히 예측해 조절한다.