Implementierung des Snowflake-ID-Generators

Susan Sarandon
Freigeben: 2024-09-21 16:18:02
Original
328 Leute haben es durchsucht

Implementing Snowflake Id generator

Was ist eine Snowflake-ID?

Snowflake-IDs werden in verteilten Umgebungen verwendet, um kollisionsfreie kurze, eindeutige IDs zu generieren. Im Gegensatz zu herkömmlichen Methoden, wie z. B. der Nutzung einer Datenbank zur ID-Generierung oder der Verwendung einer langen 128-Bit-UUID, erfordern Snowflake-IDs Zeit und einfache bitweise Operationen. Diese clevere Technik ermöglicht es jedem Microservice, unabhängig voneinander eindeutige IDs zu generieren, ohne dass ein zentrales System zur Vermeidung von Kollisionen erforderlich ist.

So generieren Sie eines

Das Generieren einer Snowflake-ID ist wie das Zusammensetzen eines Puzzles aus drei Schlüsselteilen. Lassen Sie es uns aufschlüsseln:

  1. Nehmen Sie eine n Bit lange Bitfolge:

    Zunächst beginnen wir mit einer Bitfolge der Länge n. Darin sind alle notwendigen Informationen enthalten, um eine eindeutige ID zu generieren.

  2. Teilen Sie es in drei Abschnitte: i, j und k:

    Die Bitfolge ist in drei Teile unterteilt, sodass i + j + k = n.

  • i – ​​Die Zeitkomponente:

    Der erste Teil, i, repräsentiert die aktuelle Zeit. Wählen Sie eine feste Startzeit (auch als Epoche bezeichnet) und die Bits von i werden berechnet, indem die aktuelle Zeit in Nanosekunden genommen und die Startzeit subtrahiert wird. Dadurch wird sichergestellt, dass neuere IDs immer größer sind als ältere.

  • j – Die Maschinen-ID:

    Der zweite Teil, j, ist die Maschinenkennung. Wenn Ihr Microservice startet, wird ihm eine eindeutige ID (Maschinen-ID) zugewiesen, die zum j-Teil wird. Dadurch wird sichergestellt, dass von verschiedenen Maschinen generierte IDs nicht kollidieren, selbst wenn sie genau zum gleichen Zeitpunkt erstellt werden.

  • k – Die Sequenznummer:

    Der letzte Teil, k, ist die Sequenznummer. Es verhält sich wie ein Zähler, der sich erhöht, wenn innerhalb derselben Zeiteinheit mehrere IDs generiert werden. Dadurch bleiben IDs eindeutig, auch wenn sie schnell hintereinander generiert werden.

  1. Kombinieren Sie die Teile: Sobald Sie Ihre i-, j- und k-Werte haben, verketten Sie sie, um eine einzelne Bitfolge zu bilden. Konvertieren Sie dann diese Bitfolge in die Basis 10, um Ihre endgültige Snowflake-ID zu erhalten.

Eine kurze Analogie

Stellen Sie sich eine Snowflake-ID als besonderes Geschirretikett in einer geschäftigen Küche vor:

  • Zeit (i): Dies ist wie das Ticken der Uhr in der Küche, um sicherzustellen, dass es später zubereitete Gerichte in größerer Zahl gibt als früher zubereitete.
  • Maschinen-ID (j): Jeder Koch (oder jeder Mikroservice) hat seine eigene Signatur, um sicherzustellen, dass die Etiketten seiner Gerichte nicht mit denen anderer kollidieren.
  • Sequenznummer (k): Wenn ein Koch mehrere Gerichte gleichzeitig zubereitet, fügt er seinen Tags eine kleine Erhöhung hinzu, sodass jedes Gericht ein eindeutiges Etikett hat.

Snowflake in Go implementiert

In diesem GitHub-Repo finden Sie eine Go-Implementierung der Snowflake-ID-Generierung

Quellen

  1. https://blog.x.com/engineering/en_us/a/2010/anncreasing-snowflake
  2. https://en.wikipedia.org/wiki/Snowflake_ID

Das obige ist der detaillierte Inhalt vonImplementierung des Snowflake-ID-Generators. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!