가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 정리 7장 분산 시스템을 위한 유일 ID 생성기 설계
가상 면접 사례로 배우는 대규모 시스템 설계 기초 리뷰
가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 정리 7장 분산 시스템을 위한 유일 ID 생성기 설계
가상 면접 사례로 배우는 대규모 시스템 설계 기초
7장 분산 시스템을 위한 유일 ID 생성기 설계
개략적인 설계안 제시 및 동의 구하기
유일성이 보장되는 ID를 만드는 방법은 여러 가지이다. 다음과 같은 선택지가 있다.
다음 ID값을 구할 때 K만큼 증가한다. K는 데이터베이스 서버의 수 이다. ID값의 유일성을 보장하기위해 여러 데이터베이스에 위치한 모든 ID값을 모두 다르게 처리하는 방법,
- 서버를 확장하거나 삭제할 때 K의 변동이 계속 있다.
- 여러 데이터센터에 걸친 확장이 어렵다.
- 만약 시간 순서로 ID값이 커지는 구조로 설계해야한다면 보장받을 수 없는 구조이다.
UUID
컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128비트짜리 수다.
(중복 UUID 1개가 생길 확률을 50%까지 끌어 올리려면 초당 10개의 UUID를 100년동안 계속 만들어야한다고 밝혔다.)
UUID 값은 09c93e62-80b4-468d-bf8a-c07e1040bfb2 같은 형태이다.
- UUID는 단순하다
- 각 서버에 자기가 쓸 ID를 독립적으로 생산 가능하여 규모확장도 쉽다.
- 하지만 128비트로 길다.
- ID를 시간순서로 정렬할 수 없다.
- 숫자가 아닌 문자가 포함된다.
티켓 서버
티켓 서버는 웹 서버와 연동된 하나의 중앙식 티켓서버가 ID를 배정하는 방식이다.
먼저 64비트의 ID 구조를 설명한다.
1비트( 사인 ) + 41비트 (타임스탬프) + 데이터센터ID(5비트) + 서버ID(5비트) + 일련번호 (12비트)
처음 사인은 나중을 위해 유보하는 비트로 음수와 양수를 구분하는데 사용할 수 있다.
상세 설계
위에서 본 트위터 스노플레이크 접근법이 가장 이상적이라 책에서는 밝히고 있다. 상세 설계에서는 타임스탬프와 일련번호 등 한계치를 미리 접근해야한다. 예를들어
- 타임스탬프는 2^41 - 1 = 2199023255551 밀리초가 최대값이다. 약 69년동안 타임스탬프가 작동한다는 의미이다. 따라서 69년뒤 오버플로가 발생하기 떄문에 대비해야한다.
- 일련번호는 2^12 = 4096개의 값이다. 타임스탬프는 밀리초 단위이기 떄문에 특정 한 서버가 만약 1밀리초 동안 4096개 이상의 서버를 만들면 오버플로이다.
This post is licensed under CC BY 4.0 by the author.