In verteilten Systemen kann es eine Herausforderung sein, eindeutige IDs über mehrere Server oder Prozesse hinweg sicherzustellen. IDs müssen eindeutig sein, schnell generiert werden und manchmal Informationen über ihre Quelle enthalten. Inspiriert durch den Snowflake-ID-Generierungsalgorithmus von Twitter habe ich SnowUUID entwickelt, einen verteilten UUID-Generator, der für Node.js-Anwendungen entwickelt wurde. SnowUUID kombiniert Präzision und Skalierbarkeit, um eindeutige, zeitlich geordnete Identifikatoren zu generieren, die für jedes verteilte Setup angepasst werden können.
SnowUUID vereint die Leistungsfähigkeit des Snowflake-Algorithmus von Twitter in einem kompakten, benutzerfreundlichen npm-Paket für JavaScript-Entwickler. Jede von SnowUUID generierte ID ist eine 64-Bit-Ganzzahl, die Informationen zu Zeitstempel, Rechenzentrum, Worker und Sequenz enthält. Dies macht sie ideal für verteilte Anwendungen, bei denen jeder Server oder Prozess unabhängig IDs generiert.
SnowUUID-IDs bestehen aus mehreren Segmenten:
Hier ist eine Aufschlüsselung der Bitverteilung für jedes Segment:
Segment | Bits Allocated |
---|---|
Timestamp | 41 bits |
Datacenter ID | 5 bits |
Worker ID | 5 bits |
Sequence Number | 12 bits |
SnowUUID von npm installieren:
npm install snowuuid
Um eindeutige IDs mit SnowUUID zu generieren, importieren Sie das Paket und initialisieren Sie eine neue Instanz:
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());
Die WorkerOptions-Schnittstelle von SnowUUID bietet anpassbare Einstellungen zur Anpassung an Ihr System:
const generator = new SnowUUID({ epoch: 1610000000000n, // Custom epoch workerId: 3n, // Worker ID datacenterId: 2n // Datacenter ID });
Das Herzstück von SnowUUID ist die Funktion nextId(), die durch die Kombination von Zeitstempel, Rechenzentrums-ID, Worker-ID und Sequenzbits eindeutige IDs generiert. So funktioniert es:
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 bietet eine leistungsstarke, anpassbare und effiziente Lösung für die verteilte UUID-Generierung, perfekt für Anwendungen, die eine hohe Skalierbarkeit und eindeutige IDs über mehrere Systeme hinweg erfordern. Ob für Analysen, Messaging oder Microservices, SnowUUID sorgt für eindeutige, zeitlich geordnete Identifikatoren und hilft Ihnen so, sicher zu skalieren.
Entdecken Sie SnowUUID auf GitHub: SnowUUID Repository
Das obige ist der detaillierte Inhalt vonWir stellen vor: SnowUUID: Ein von Snowflake inspirierter verteilter UUID-Generator. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!