分散システムでは、複数のサーバーまたはプロセス間で一意の 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 の中核となるのは 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 中国語 Web サイトの他の関連記事を参照してください。