snowflake 소개
- Twitter가 OSS로 공개하고 있는 ID 생성기
- Time-base한 ID (시간대별로 정렬이 가능하다. 의미를 가지는 Id)
- 64bit로 ID를 표현 (GUID 같은 경우는 128bit로 구성됨)
- 복수의 머신을 운용하여 병렬로 유일성을 가진 ID를 생성할 수 있다.
- 스칼라 언어로 구현
- 1초당 생성 가능한 개수 : 1000 [millisecond] * (2^12)[sequence number] = 4,096,000
- 맨 처음 비트는 사인 비트 : 1비트를 할당한다.
- 타임 스탬프 : 41비트를 할당한다. 기원 시각(epoch) 이후로 몇 밀리초가 경과했는지를 나타내는 값이다.
- 데이터 센터 ID : 5비트를 할당한다. 따라서 2^5=32개 데이터센터를 지원할 수 있다.
- 서버 ID : 5비트를 할당한다. 따라서 데이터센터당 32개 서버를 사용할 수 있다.
- 일련번호 : 12비티를 할당한다. 각 서버에서는 ID를 생성할 때마다 이 일련번호를 1만큼 증가시킨다. 이 값은 1밀리 초가 경과할 때마다 0으로 초기화된다.
snowflake 단점
- OS의 시각 차이에 약하다.
- 운영상 고민이 다소 필요하다.
- ID 채번 시에 snowflake 서버에 Thrift 경유로 접속하게 되어있다.
- 중~소규모에서 운용할 때는 배보다 배꼽이 커진다.
참조 사이트
'프로그래밍' 카테고리의 다른 글
이벤트 소싱 패턴(Event Sourcing Pattern)에 대해서 (0) | 2023.03.30 |
---|---|
Elo를 적용해서 레이팅 포인트 계산하는 예제 (0) | 2023.03.13 |
프로그래밍 공부 방법에 대해서 (0) | 2023.02.06 |
JQuery 사용해서 HTML에서 Controller Actions 호출하는 방법 (0) | 2023.01.26 |
[Linux/Unix] 절대경로와 상대경로 (0) | 2022.12.29 |
댓글