Dans les systèmes distribués, garantir des identifiants uniques sur plusieurs serveurs ou processus peut être difficile. Les identifiants doivent être uniques, générés rapidement et parfois transmettre des informations sur leur source. Inspiré par l'algorithme de génération Snowflake ID de Twitter, j'ai développé SnowUUID, un générateur d'UUID distribué conçu pour les applications Node.js. SnowUUID combine précision et évolutivité pour générer des identifiants uniques, classés dans le temps, qui peuvent être personnalisés pour toute configuration distribuée.
SnowUUID apporte la puissance de l'algorithme Snowflake de Twitter dans un package npm compact et facile à utiliser pour les développeurs JavaScript. Chaque identifiant généré par SnowUUID est un entier de 64 bits contenant des informations sur l'horodatage, le centre de données, le travailleur et la séquence, ce qui le rend idéal pour les applications distribuées où chaque serveur ou processus génère des identifiants indépendamment.
Les identifiants SnowUUID sont composés de plusieurs segments :
Voici une répartition de la répartition des bits pour chaque segment :
Segment | Bits Allocated |
---|---|
Timestamp | 41 bits |
Datacenter ID | 5 bits |
Worker ID | 5 bits |
Sequence Number | 12 bits |
Installez SnowUUID depuis npm :
npm install snowuuid
Pour générer des identifiants uniques avec SnowUUID, importez le package et initialisez une nouvelle instance :
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());
L'interface WorkerOptions de SnowUUID fournit des paramètres personnalisables pour s'adapter à votre système :
const generator = new SnowUUID({ epoch: 1610000000000n, // Custom epoch workerId: 3n, // Worker ID datacenterId: 2n // Datacenter ID });
Au cœur de SnowUUID se trouve la fonction nextId(), qui génère des identifiants uniques en combinant l'horodatage, l'ID du centre de données, l'ID du travailleur et les bits de séquence. Voici comment cela fonctionne :
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 offre une solution puissante, personnalisable et efficace pour la génération distribuée d'UUID, parfaite pour les applications qui nécessitent une grande évolutivité et des identifiants uniques sur plusieurs systèmes. Qu'il s'agisse d'analyses, de messagerie ou de microservices, SnowUUID garantit des identifiants uniques et classés dans le temps, vous aidant ainsi à évoluer en toute confiance.
Explorez SnowUUID sur GitHub : référentiel SnowUUID
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!