>백엔드 개발 >Golang >눈송이 ID 생성기 구현

눈송이 ID 생성기 구현

Susan Sarandon
Susan Sarandon원래의
2024-09-21 16:18:02361검색

Implementing Snowflake Id generator

눈송이 ID란 무엇입니까?

Snowflake ID는 분산 환경에서 충돌 없는 짧고 고유한 ID를 생성하는 데 사용됩니다. ID 생성을 위해 데이터베이스를 사용하거나 긴 128비트 UUID를 사용하는 등의 기존 방법과 달리 Snowflake ID는 시간과 간단한 비트 단위 연산을 사용합니다. 이 영리한 기술을 사용하면 충돌을 방지하기 위한 중앙 시스템 없이 각 마이크로서비스가 고유 ID를 독립적으로 생성할 수 있습니다.

생성하는 방법

눈송이 ID를 생성하는 것은 세 가지 핵심 조각으로 퍼즐을 만드는 것과 같습니다. 분석해 보겠습니다.

  1. n비트 긴 비트 문자열 가져오기:

    먼저, 길이 n의 비트 문자열로 시작합니다. 여기에는 고유 ID를 생성하는 데 필요한 모든 정보가 포함됩니다.

  2. i, j, k의 세 부분으로 나눕니다:

    비트 문자열은 i + j + k = n과 같이 세 부분으로 나누어집니다.

  • i - 시간 구성요소:

    첫 번째 부분인 i는 현재 시간을 나타냅니다. 고정된 시작 시간(에포크라고도 함)을 선택하면 i의 비트는 현재 시간(나노초)에서 시작 시간을 빼서 계산됩니다. 이렇게 하면 최신 ID가 이전 ID보다 항상 더 커집니다.

  • j - 머신 ID:

    두 번째 부분인 j는 기계 식별자입니다. 마이크로서비스가 시작되면 j 부분이 되는 고유 ID(머신 ID)가 할당됩니다. 이렇게 하면 서로 다른 컴퓨터에서 생성된 ID가 정확히 같은 순간에 생성되더라도 충돌하지 않습니다.

  • k - 시퀀스 번호:

    마지막 부분 k는 시퀀스 번호입니다. 동일한 시간 단위 내에 여러 ID가 생성될 때마다 증가하는 카운터처럼 작동합니다. 이렇게 하면 ID가 연속적으로 생성되더라도 고유한 ID가 유지됩니다.

  1. 조각 결합: i, j, k 값이 있으면 이를 연결하여 단일 비트 문자열을 형성합니다. 그런 다음 이 비트 문자열을 기본 10으로 변환하여 최종 Snowflake ID를 얻습니다.

빠른 비유

바쁜 주방에서 눈송이 ID를 특별한 요리 태그로 생각해보세요.

  • 시간(i): 이는 주방의 시계가 똑딱거리는 것과 같아서 나중에 준비한 요리가 이전에 만든 요리보다 더 많은 양을 얻게 해줍니다.
  • 머신 ID(j): 각 셰프(또는 마이크로서비스)에는 고유한 서명이 있어 요리 태그가 다른 사람의 요리 태그와 충돌하지 않도록 합니다.
  • 순서 번호(k): 요리사가 한 순간에 여러 요리를 만드는 경우 태그에 약간의 증분을 추가하므로 각 요리에는 고유한 라벨이 있습니다.

Go로 구현된 Snowflake

Snowflake ID 생성의 Go 구현을 보려면 이 GitHub 저장소를 확인하세요

출처

  1. https://blog.x.com/engineering/en_us/a/2010/announce-snowflake
  2. https://en.wikipedia.org/wiki/Snowflake_ID

위 내용은 눈송이 ID 생성기 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.