在分散式系統中,確保跨多個伺服器或進程的唯一 ID 可能具有挑戰性。 ID 必須是唯一的、快速產生的,有時還傳達有關其來源的資訊。受 Twitter 的 Snowflake ID 生成演算法的啟發,我開發了 SnowUUID,這是一個專為 Node.js 應用程式設計的分散式 UUID 產生器。 SnowUUID 結合了精確度和可擴展性,產生獨特的、按時間排序的標識符,可以針對任何分散式設定進行自訂。
SnowUUID 將 Twitter Snowflake 演算法的強大功能融入到一個緊湊、易於使用的 npm 套件中,供 JavaScript 開發人員使用。 SnowUUID 產生的每個 ID 都是 64 位元整數,包含有關時間戳記、資料中心、worker 和序列的信息,非常適合每個伺服器或進程獨立產生 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 的核心是 nextId() 函數,它透過組合時間戳記、資料中心 ID、工作 ID 和序列位元來產生唯一 ID。其工作原理如下:
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中文網其他相關文章!