눈송이 ID는 분산 환경에서 충돌 없는 짧고 고유한 ID를 생성하는 데 사용됩니다. ID 생성을 위해 데이터베이스를 사용하거나 긴 128비트 UUID를 사용하는 등의 기존 방법과 달리 Snowflake ID는 시간과 간단한 비트 단위 연산을 사용합니다. 이 영리한 기술을 사용하면 충돌을 피하기 위해 중앙 시스템이 필요 없이 각 마이크로서비스가 고유 ID를 독립적으로 생성할 수 있습니다.
눈송이 ID를 생성하는 것은 세 가지 핵심 조각으로 퍼즐을 만드는 것과 같습니다. 분석해 보겠습니다.
n비트 긴 비트 문자열 가져오기:
먼저, 길이 n의 비트 문자열로 시작합니다. 여기에는 고유 ID를 생성하는 데 필요한 모든 정보가 포함됩니다.
i, j, k의 세 부분으로 나눕니다.:
비트 문자열은 i j k = n과 같이 세 부분으로 나뉩니다.
i - 시간 구성요소:
첫 번째 부분인 i는 현재 시간을 나타냅니다. 고정된 시작 시간(에포크라고도 함)을 선택하면 i의 비트는 현재 시간(나노초)에서 시작 시간을 빼서 계산됩니다. 이렇게 하면 최신 ID가 항상 이전 ID보다 커집니다.
j - 컴퓨터 ID:
두 번째 부분인 j는 기계 식별자입니다. 마이크로서비스가 시작되면 j 부분이 되는 고유 ID(머신 ID)가 할당됩니다. 이렇게 하면 서로 다른 컴퓨터에서 생성된 ID가 정확히 같은 순간에 생성되더라도 충돌하지 않습니다.
k - 시퀀스 번호:
마지막 부분 k는 시퀀스 번호입니다. 동일한 시간 단위 내에 여러 ID가 생성될 때마다 증가하는 카운터처럼 작동합니다. 이렇게 하면 ID가 빠르게 연속적으로 생성되더라도 ID가 고유하게 유지됩니다.
바쁜 주방에서 Snowflake ID를 특별한 요리 태그로 생각해보세요.
Snowflake ID 생성의 Go 구현을 보려면 이 GitHub 저장소를 확인하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3