분산 시스템에서는 여러 서버 또는 프로세스에서 고유 ID를 보장하는 것이 어려울 수 있습니다. ID는 고유하고 빠르게 생성되어야 하며 때로는 소스에 대한 정보를 전달해야 합니다. Twitter의 Snowflake ID 생성 알고리즘에서 영감을 받아 Node.js 애플리케이션용으로 설계된 분산 UUID 생성기인 SnowUUID를 개발했습니다. SnowUUID는 정밀도와 확장성을 결합하여 모든 분산 설정에 맞게 사용자 정의할 수 있는 고유한 시간 순서 식별자를 생성합니다.
SnowUUID는 Twitter의 Snowflake 알고리즘의 강력한 기능을 JavaScript 개발자를 위한 작고 사용하기 쉬운 npm 패키지로 제공합니다. SnowUUID에서 생성된 각 ID는 타임스탬프, 데이터센터, 작업자 및 시퀀스에 대한 정보를 포함하는 64비트 정수이므로 각 서버 또는 프로세스가 독립적으로 ID를 생성하는 분산 애플리케이션에 이상적입니다.
SnowUUID 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의 WorkerOptions 인터페이스는 시스템에 맞게 사용자 정의 가능한 설정을 제공합니다.
const generator = new SnowUUID({ epoch: 1610000000000n, // Custom epoch workerId: 3n, // Worker ID datacenterId: 2n // Datacenter ID });
SnowUUID의 핵심에는 타임스탬프, 데이터센터 ID, 작업자 ID, 시퀀스 비트를 결합하여 고유한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!