반응형
요구사항
- ID는 유일해야 하며 숫자로만 이루어짐
- 64비트로 표현 가능해야 하며, 발급 날짜에 따라 정렬이 가능해야 한다
- 초당 10,000개의 ID를 만들 수 있어야 한다.
분산 시스템에서 유일성이 보장되는 ID를 만드는 방법
- 다중 마스터 복제
- UUID
- 티켓 서버
- 트위터 스노플레이크 접근법
다중 마스터 복제
- 데이터베이스의 auto_increment 기능을 활용하는 것
- ID의 값을 1만큼 증가시켜 얻는 것이 아니라, 현재 사용 중인 데이터베이스의 서버의 수인 k만큼 증가시켜 얻는 접근법
- 어느 정도 규모 확장성 문제를 해결할 수 있는 반면 다음과 같은 한계가 존재한다.
- 여러 데이터센터에 거쳐 규모를 늘리기 어렵다
- ID의 유일성을 보장할 수는 있지만, 시간 흐름에 맞추어 커지도록 보장할 수 없다.
- 서버를 추가하거나 삭제할 때 대응이 어렵다.
UUID
- UUID는 컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128비트짜리 수다.
- UUID 값은 충돌 가능성이 지극히 낮다.
장점
- UUID를 만드는 것은 단순하며 규모 확장도 쉽다.
단점
- ID가 128비트로 길며 숫자가 아닌 값이 포함될 수 있다.
- ID를 시간순으로 정렬할 수 없다.
티켓 서버
- auto_increment 기능을 갖춘 데이터베이스 서버인 티켓 서버를 중앙 집중형으로 하나만 사용하는 것.
장점
- 유일성이 보장되는 오직 숫자로만 구성된 ID를 쉽게 만들 수 있다.
단점
- 티켓 서버가 SPOF가 된다.
- 티켓 서버를 여러 대로 분산시키면, 데이터 동기화와 같은 새로운 문제가 발생
트위터 스노플레이크 접근법
ID의 구조
- Sign 비트(1비트)
- 타임스탬프 (41비트)
- 기원시간 (epoch) 이후로 몇 밀리초 경과했는지를 나타내는 값
- 데이터센터 ID (5비트)
- 32개의 데이터 센터를 지원할 수 있다.
- 서버 ID (5비트)
- 데이터 센터 당 32개 서버를 사용할 수 있다.
- 일련번호 (12비트)
- 각 서버에서는 ID를 생성할 때마다 일련번호를 1만큼 증가시킨다.
- 1밀리 초가 경과할 때마다 0으로 초기화된다.
반응형
'공통 > 인프라 & 시스템 설계' 카테고리의 다른 글
[대규모 시스템 설계 기초 정리 + Cassandra] 안정 해시 설계 + Cassandra Virtual Node (0) | 2022.01.18 |
---|---|
[대규모 시스템 설계 기초 정리] 알림 시스템 설계 (0) | 2021.11.01 |
[대규모 시스템 설계 기초 정리] 처리율 제한 장치 (0) | 2021.10.28 |
대규모 서비스를 위한 고려 사항 (2) (0) | 2021.08.26 |
대규모 서비스를 위한 고려 사항 (1) (0) | 2021.08.26 |