읽을때 마다 새로운 지식을 알게되는 책이지만, 다음 챕터로 넘어 갈수록 너무 어려워져서 손이가지 않는 책으로 최대한 많이 이해하고 완독을 목표로 정리를 하기위해서 글을 작성하게 되었다.
처음에는 2부 부터 읽다가 왜 1을 읽지 않느냐는 질문을 받고 1부를 읽게되었고 1부 부터 읽는게 필수라고 할정도로 난이도 차이가 있다.
잘근잘근 씹어먹듯, 많은 지식을 남길 수 있도록 열심히 정리해보자!
가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 예스24
유일하고, 정렬기능을 갖춘 ID정보 생성이 필요하다.
특이점은 이번에는 숫자로만 이용해야하고 64bit 를 기준으로 생성되어야한다.
다음과 같은 방법이 있는데, 같이 확인해보자.
auto-increment 기능을 활용하여 각각의 ID 아이디 값을 구할때 DB 의 서버 수만큼 증가시키는 방법으로 적용하는 방법
1만큼 증가하지 않고 K 만큼 증가하며 K 는 DB 의 서버 수와 같다. 이러한 방법으로 규모 확장성 문제를 어느정도 해결할 수 있다.
다만 간편한 만큼 뚜렷한 문제가 있는데,
저장되는 데이터를 유일하게 식별하기 위한 128bit의 값이다.
UUID 의 형태는 다음과 같다.
특징 중 하나는, 충돌가능성이 작은 것이다. 위키피디아 기반으로 보면 중복1개가 발생할 확률을 50% 까지 올리려면 초당 10억개의 UUID 를 계속해서 100년동안 만들어야 가능하다고 한다.
또한 다른 특징은 서버 구분없이 독립적으로 생성가능하다는 점이다.
장점은 다음과 같다.
UUID 생성이 단순하다는 장점이 있다. 각 웹서버가 생성하므로 규모 확장도 간단하게 진행할 수 있다.
단점은
이 아이디어의 핵심키는 auto-increment 기능을 갖춘 데이터서버 (티켓서버)를 중앙 집중형으로 하나만 사용하는 것이다.
장점
이전의 방법에서는 조건을 만족시키는 것이 없었다. 따라서 트위터(X)에서 사용하는 기법을 기반으로 정리해보도록 해보자.
우선 각각의 ID는 64bit로 구성되어있는데 해당 부분부터 정리하면 다음과 같다.
이름 | bit | 설명 |
---|---|---|
sign bit | 1 | 나중을 위한 유보 |
timestamp | 41 | 기원시간 이후 몇 밀리초가 지나갔는지를 나타내는 값 |
데이터 센터 ID | 5 | 32개의 데이터 센터를 지원한다. |
서버 ID | 5 | 32개의 서버를 이용할 수 있게 한다. |
일련번호 | 12 | 각 서버 별로 ID 생성할때 마다 1씩 증가한다. timestamp가 변경되는 1 밀리초가 경과될때마다 0으로 리셋된다. 총 4096개의 값을 가질 수 있다. |
다만 해당 timestamp는 총 69년 동안 동작한다. 기준점에서 69년이 지나면 기원시간을 변경하거나, ID 체계를 이전해야 한다.
체크해야 될 부분은 다음과 같다.