>웹 프론트엔드 >JS 튜토리얼 >SnowUUID 소개: Snowflake에서 영감을 받은 분산 UUID 생성기

SnowUUID 소개: Snowflake에서 영감을 받은 분산 UUID 생성기

Patricia Arquette
Patricia Arquette원래의
2024-11-04 07:23:31918검색

분산 시스템에서는 여러 서버 또는 프로세스에서 고유 ID를 보장하는 것이 어려울 수 있습니다. ID는 고유하고 빠르게 생성되어야 하며 때로는 소스에 대한 정보를 전달해야 합니다. Twitter의 Snowflake ID 생성 알고리즘에서 영감을 받아 Node.js 애플리케이션용으로 설계된 분산 UUID 생성기인 SnowUUID를 개발했습니다. SnowUUID는 정밀도와 확장성을 결합하여 모든 분산 설정에 맞게 사용자 정의할 수 있는 고유한 시간 순서 식별자를 생성합니다.

왜 SnowUUID인가?

SnowUUID는 Twitter의 Snowflake 알고리즘의 강력한 기능을 JavaScript 개발자를 위한 작고 사용하기 쉬운 npm 패키지로 제공합니다. SnowUUID에서 생성된 각 ID는 타임스탬프, 데이터센터, 작업자 및 시퀀스에 대한 정보를 포함하는 64비트 정수이므로 각 서버 또는 프로세스가 독립적으로 ID를 생성하는 분산 애플리케이션에 이상적입니다.

Introducing SnowUUID: A Distributed UUID Generator Inspired by Snowflake

SnowUUID의 특징

  • 시간순으로 정렬된 ID: ID는 시간순으로 생성되므로 시간순으로 정렬할 수 있습니다.
  • 사용자 정의 옵션: SnowUUID를 사용하면 데이터 센터 및 작업자 ID를 구성하여 분산 시스템 전반에 걸쳐 다양한 설정을 지원할 수 있습니다.
  • 높은 처리량: 밀리초당 시퀀스 제한을 통해 SnowUUID는 높은 처리량 요구 사항을 처리하여 ID 충돌을 방지할 수 있습니다.

SnowUUID 작동 방식

SnowUUID ID는 여러 세그먼트로 구성됩니다.

  1. 타임스탬프: ID의 시간순 정렬을 보장합니다.
  2. 데이터센터 ID: 서로 다른 데이터센터를 구별합니다.
  3. 작업자 ID: 데이터 센터 내 작업자를 구별합니다.
  4. 순서: 동일한 밀리초 내에 여러 개의 고유 ID를 생성할 수 있도록 합니다.

각 세그먼트의 비트 분포 분석은 다음과 같습니다.

Segment Bits Allocated
Timestamp 41 bits
Datacenter ID 5 bits
Worker ID 5 bits
Sequence Number 12 bits

용법

npm에서 SnowUUID 설치:

npm install snowuuid

SnowUUID로 고유 ID를 생성하려면 패키지를 가져오고 새 인스턴스를 초기화하세요.

const { SnowUUID } = require('snowuuid');

// Initialize SnowUUID with options
const generator = new SnowUUID({
    epoch: 1609459200000n,  // Starting from January 1, 2021
    workerId: 1n,           // Unique ID for each worker
    datacenterId: 1n        // Unique ID for each datacenter
});

// Generate a unique ID
const uniqueId = generator.nextId();
console.log(uniqueId.toString());

SnowUUID 사용자 정의

SnowUUID의 WorkerOptions 인터페이스는 시스템에 맞게 사용자 정의 가능한 설정을 제공합니다.

  • 에포크: 밀리초 단위의 사용자 지정 시작 시간
  • workerId: 데이터 센터 내 각 작업자의 고유 식별자입니다.
  • datacenterId: 각 데이터센터의 고유 식별자입니다.
const generator = new SnowUUID({
    epoch: 1610000000000n,  // Custom epoch
    workerId: 3n,           // Worker ID
    datacenterId: 2n        // Datacenter ID
});

내부 정보: 코드

SnowUUID의 핵심에는 타임스탬프, 데이터센터 ID, 작업자 ID, 시퀀스 비트를 결합하여 고유한 ID를 생성하는 nextId() 함수가 있습니다. 작동 방식은 다음과 같습니다.

  • 시계 처리: 알고리즘은 시스템 시계가 항상 앞으로 이동하도록 보장합니다. 시계가 거꾸로 가면 ID 중복 방지를 위해 오류가 발생합니다.
  • 시퀀스 오버플로 처리: 밀리초 내에 시퀀스 제한에 도달하면 SnowUUID는 다음 밀리초까지 기다려 ID 생성을 계속합니다.

예제 코드: nextId 함수

nextId() {
    let timestamp = SnowUUID.now();

    if (timestamp < this.#lastTimestamp) {
        throw new Error(
            `Clock moved backwards. Unable to generate ID for ${this.#lastTimestamp - timestamp} milliseconds.`
        );
    }

    if (timestamp === this.#lastTimestamp) {
        this.#sequence = (this.#sequence + 1n) & SEQUENCE_MASK;
        if (this.#sequence === 0n) {
            timestamp = this.tilNextMillis(this.#lastTimestamp);
        }
    } else {
        this.#sequence = 0n;
    }

    this.#lastTimestamp = timestamp;

    return (
        ((timestamp - this.#epoch) << DEFAULT_TIMESTAMP_LEFT_SHIFT) |
        (this.#datacenterId << DEFAULT_DATACENTER_ID_SHIFT) |
        (this.#workerId << DEFAULT_WORKER_ID_SHIFT) |
        this.#sequence
    );
}

결론

SnowUUID는 분산 UUID 생성을 위한 강력하고 사용자 정의 가능하며 효율적인 솔루션을 제공하며, 여러 시스템에서 높은 확장성과 고유 ID가 필요한 애플리케이션에 적합합니다. 분석, 메시징, 마이크로서비스 등 무엇이든 SnowUUID는 고유한 시간 순서 식별자를 보장하여 안심하고 확장할 수 있도록 돕습니다.

GitHub에서 SnowUUID 탐색: SnowUUID 저장소

위 내용은 SnowUUID 소개: Snowflake에서 영감을 받은 분산 UUID 생성기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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