Maison > interface Web > js tutoriel > Présentation de SnowUUID : un générateur d'UUID distribué inspiré de Snowflake

Présentation de SnowUUID : un générateur d'UUID distribué inspiré de Snowflake

Patricia Arquette
Libérer: 2024-11-04 07:23:31
original
904 Les gens l'ont consulté

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.

Pourquoi SnowUUID ?

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.

Introducing SnowUUID: A Distributed UUID Generator Inspired by Snowflake

Caractéristiques de SnowUUID

  • ID ordonnés dans le temps : les identifiants sont générés dans une séquence chronologique, garantissant qu'ils peuvent être triés par ordre chronologique.
  • Options de personnalisation : SnowUUID permet la configuration du centre de données et des ID de travailleur, prenant en charge différentes configurations sur les systèmes distribués.
  • Haut débit : avec une limite de séquence par milliseconde, SnowUUID peut gérer les exigences de haut débit, évitant ainsi les conflits d'identification.

Comment fonctionne SnowUUID

Les identifiants SnowUUID sont composés de plusieurs segments :

  1. Horodatage : garantit l'ordre chronologique des identifiants.
  2. ID du centre de données : fait la distinction entre les différents centres de données.
  3. ID de travailleur : distingue les différents travailleurs au sein d'un centre de données.
  4. Séquence : garantit que plusieurs identifiants uniques peuvent être créés dans la même milliseconde.

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

Usage

Installez SnowUUID depuis npm :

npm install snowuuid
Copier après la connexion

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());
Copier après la connexion

Personnalisation de SnowUUID

L'interface WorkerOptions de SnowUUID fournit des paramètres personnalisables pour s'adapter à votre système :

  • époque : heure de démarrage personnalisée en millisecondes.
  • workerId : identifiant unique pour chaque travailleur au sein d'un centre de données.
  • datacenterId : Identifiant unique de chaque datacenter.
const generator = new SnowUUID({
    epoch: 1610000000000n,  // Custom epoch
    workerId: 3n,           // Worker ID
    datacenterId: 2n        // Datacenter ID
});
Copier après la connexion

Sous le capot : le code

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 :

  • Gestion de l'horloge : l'algorithme garantit que l'horloge système avance toujours. Si l'horloge recule, une erreur est générée pour éviter les identifiants en double.
  • Gestion des débordements de séquence : lorsque la limite de séquence est atteinte en une milliseconde, SnowUUID attend la milliseconde suivante pour continuer à générer des identifiants.

Exemple de code : la fonction 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
    );
}
Copier après la connexion

Conclusion

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal