Heim > Web-Frontend > js-Tutorial > Hauptteil

Wir stellen vor: SnowUUID: Ein von Snowflake inspirierter verteilter UUID-Generator

Patricia Arquette
Freigeben: 2024-11-04 07:23:31
Original
856 Leute haben es durchsucht

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.

Warum SnowUUID?

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.

Introducing SnowUUID: A Distributed UUID Generator Inspired by Snowflake

Funktionen von SnowUUID

  • Zeitlich geordnete IDs: IDs werden in einer zeitlich geordneten Reihenfolge generiert, um sicherzustellen, dass sie chronologisch sortiert werden können.
  • Anpassungsoptionen: SnowUUID ermöglicht die Konfiguration des Rechenzentrums und der Worker-IDs und unterstützt verschiedene Setups in verteilten Systemen.
  • Hoher Durchsatz: Mit einem Sequenzlimit pro Millisekunde kann SnowUUID hohe Durchsatzanforderungen bewältigen und so ID-Konflikte verhindern.

So funktioniert SnowUUID

SnowUUID-IDs bestehen aus mehreren Segmenten:

  1. Zeitstempel: Stellt die chronologische Reihenfolge der IDs sicher.
  2. Rechenzentrums-ID: Unterscheidet zwischen verschiedenen Rechenzentren.
  3. Arbeiter-ID: Unterscheidet zwischen verschiedenen Arbeitern innerhalb eines Rechenzentrums.
  4. Sequenz: Stellt sicher, dass mehrere eindeutige IDs in derselben Millisekunde erstellt werden können.

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

Verwendung

SnowUUID von npm installieren:

npm install snowuuid
Nach dem Login kopieren

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());
Nach dem Login kopieren

Anpassen von SnowUUID

Die WorkerOptions-Schnittstelle von SnowUUID bietet anpassbare Einstellungen zur Anpassung an Ihr System:

  • Epoche: Benutzerdefinierte Startzeit in Millisekunden.
  • workerId: Eindeutige Kennung für jeden Arbeiter innerhalb eines Rechenzentrums.
  • datacenterId: Eindeutige Kennung für jedes Rechenzentrum.
const generator = new SnowUUID({
    epoch: 1610000000000n,  // Custom epoch
    workerId: 3n,           // Worker ID
    datacenterId: 2n        // Datacenter ID
});
Nach dem Login kopieren

Unter der Haube: Der Code

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:

  • Uhrverarbeitung: Der Algorithmus stellt sicher, dass sich die Systemuhr immer vorwärts bewegt. Wenn die Uhr zurückgeht, wird ein Fehler ausgegeben, um doppelte IDs zu verhindern.
  • Sequenzüberlaufbehandlung: Wenn das Sequenzlimit innerhalb einer Millisekunde erreicht wird, wartet SnowUUID bis zur nächsten Millisekunde, um mit der Generierung von IDs fortzufahren.

Beispielcode: Die nextId-Funktion

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
    );
}
Nach dem Login kopieren

Abschluss

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage