"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 눈송이 ID 생성기 구현

눈송이 ID 생성기 구현

2024-11-07에 게시됨
검색:640

Implementing Snowflake Id generator

눈송이 ID란 무엇입니까?

눈송이 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를 얻습니다.

빠른 비유

바쁜 주방에서 Snowflake 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
릴리스 선언문 이 글은 https://dev.to/alquama/implementing-snowflake-id-generator-3f8k?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3