Maison  >  Article  >  développement back-end  >  Implémentation du générateur d'identifiant Snowflake

Implémentation du générateur d'identifiant Snowflake

Susan Sarandon
Susan Sarandonoriginal
2024-09-21 16:18:02193parcourir

Implementing Snowflake Id generator

Qu'est-ce qu'un identifiant Snowflake ?

Les identifiants Snowflake sont utilisés dans des environnements distribués pour générer sans collision des identifiants courts et uniques. Contrairement aux méthodes traditionnelles, telles que le recours à une base de données pour la génération d'identifiants ou l'utilisation d'un long UUID de 128 bits, les identifiants Snowflake utilisent du temps et de simples opérations au niveau du bit. Cette technique intelligente permet à chaque microservice de générer des identifiants uniques de manière indépendante, sans avoir besoin d'un système central pour éviter les collisions.

Comment en générer un

Générer un identifiant Snowflake, c'est comme construire un puzzle avec trois pièces clés. Décomposons-le :

  1. Prenez une chaîne de bits longue de n bits :

    Tout d’abord, nous commençons avec une chaîne de bits de longueur n. Celui-ci contiendra toutes les informations nécessaires pour générer un identifiant unique.

  2. Divisez-le en trois sections : i, j et k :

    La chaîne de bits est divisée en trois parties, telles que i + j + k = n.

  • i - La composante temps :

    La première partie, i, représente l'heure actuelle. Choisissez une heure de début fixe (également appelée époque), et les bits de i seront calculés en prenant l'heure actuelle en nanosecondes et en soustrayant l'heure de début. Cela garantit que les identifiants les plus récents sont toujours plus grands que les plus anciens.

  • j - L'ID de la machine :

    La deuxième partie, j, est l'identifiant de la machine. Lorsque votre microservice démarre, un identifiant unique (ID de machine) lui est attribué, qui devient la partie j. Cela garantit que les identifiants générés par différentes machines n'entreront pas en collision, même s'ils sont créés exactement au même moment.

  • k - Le numéro de séquence :

    La dernière partie, k, est le numéro de séquence. Il agit comme un compteur qui s'incrémente chaque fois que plusieurs identifiants sont générés dans la même unité de temps. Cela permet de conserver les identifiants uniques, même s'ils sont générés en succession rapide.

  1. Combinez les pièces : Une fois que vous avez vos valeurs i, j et k, concaténez-les pour former une chaîne d'un seul bit. Ensuite, convertissez cette chaîne de bits en base 10 pour obtenir votre identifiant Snowflake final.

Une analogie rapide

Considérez un identifiant flocon de neige comme une étiquette de plat spéciale dans une cuisine occupée :

  • Heure (i) : C'est comme l'horloge qui tourne dans la cuisine, garantissant que les plats préparés plus tard reçoivent un nombre plus grand que ceux préparés plus tôt.
  • ID de la machine (j) : chaque chef (ou microservice) a sa propre signature, garantissant que les étiquettes de son plat n'entrent pas en conflit avec celles de quelqu'un d'autre.
  • Numéro de séquence (k) : Si un chef prépare plusieurs plats en un instant, il ajoute un petit incrément à ses étiquettes, de sorte que chaque plat a une étiquette unique.

Snowflake implémenté dans Go

Consultez ce dépôt GitHub pour une implémentation Go de la génération d'ID Snowflake

Sources

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

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!

Déclaration:
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