"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Implémentation du générateur d'identifiant Snowflake

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

Publié le 2024-11-07
Parcourir:801

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 des identifiants sans collision, 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 indépendamment, 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. Prendre 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 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 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 très fréquentée :

  • Heure (i) : c'est comme si l'horloge tournait dans la cuisine, garantissant que les plats préparés plus tard soient plus nombreux 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 ait 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
Déclaration de sortie Cet article est reproduit sur : https://dev.to/alquama/implementing-snowflake-id-generator-3f8k?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3