본문 바로가기
프로그래밍

GUID를 향한 여정 - 트위터가 만든 Twitter Snowflake

by bantomak 2023. 2. 24.

 

 

Announcing Snowflake

Announcing Snowflake

blog.twitter.com

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 경유로 접속하게 되어있다.
  • 중~소규모에서 운용할 때는 배보다 배꼽이 커진다.

 

참조 사이트

 

[System Design][7] 분산 시스템을 위한 유일 ID 생성시 설계

이 글은 책 「가상 면접 사례로 배우는 대규모 시스템 설계 기초」를 공부하고 정리한 글입니다.

velog.io

 

분산 처리 시스템에서 유일한 식별자를 만드는 방법(twitter snowflake)

배경 프로그래밍을 하다 보면 유니크한 식별자 값이 필요한 경우가 있다. 객체를 식별하든 무언가 다른 것과 구분이 필요한 경우로 데이터베이스의 Primary Key나 UUID 같은 것이 그 예다. 필자의 경

jeong-pro.tistory.com

댓글