"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Implementación del generador de ID de copo de nieve

Implementación del generador de ID de copo de nieve

Publicado el 2024-11-07
Navegar:243

Implementing Snowflake Id generator

¿Qué es una identificación de copo de nieve?

Los ID de copos de nieve se utilizan en entornos distribuidos para generar ID únicos, breves y sin colisiones. A diferencia de los métodos tradicionales, como confiar en una base de datos para la generación de ID o usar un UUID largo de 128 bits, los ID de Snowflake utilizan tiempo y operaciones bit a bit simples. Esta técnica inteligente permite que cada microservicio genere identificaciones únicas de forma independiente, sin necesidad de un sistema central para evitar colisiones.

Cómo generar uno

Generar una ID de Snowflake es como construir un rompecabezas con tres piezas clave. Analicémoslo:

  1. Tome una cadena de bits de n bits de longitud:

    Primero, comenzamos con una cadena de bits de longitud n. Este contendrá toda la información necesaria para generar una identificación única.

  2. Divídelo en tres secciones: i, j y k:

    La cadena de bits se divide en tres partes, de modo que i j k = n.

  • i - El componente de tiempo:

    La primera parte, i, representa la hora actual. Elija una hora de inicio fija (también conocida como época) y los bits de i se calcularán tomando la hora actual en nanosegundos y restando la hora de inicio. Esto garantiza que los ID más nuevos sean siempre más grandes que los más antiguos.

  • j - ID de la máquina:

    La segunda parte, j, es el identificador de la máquina. Cuando se inicia su microservicio, se le asigna una ID única (ID de máquina), que se convierte en la parte j. Esto garantiza que las identificaciones generadas por diferentes máquinas no colisionen, incluso si se crean exactamente en el mismo momento.

  • k - El número de secuencia:

    La última parte, k, es el número de secuencia. Actúa como un contador que aumenta cada vez que se generan múltiples ID dentro de la misma unidad de tiempo. Esto mantiene los ID únicos, incluso si se generan en rápida sucesión.

  1. Combina las piezas: Una vez que tenga los valores de i, j y k, concatenelos para formar una cadena de un solo bit. Luego, convierta esta cadena de bits a base 10 para obtener su ID final de Snowflake.

Una analogía rápida

Piense en una identificación de Snowflake como una etiqueta de plato especial en una cocina ocupada:

  • Tiempo (i): Esto es como el tictac del reloj en la cocina, asegurando que los platos preparados más tarde obtengan mayor número que los preparados antes.
  • ID de máquina (j): cada chef (o microservicio) tiene su propia firma, lo que garantiza que las etiquetas de sus platos no coincidan con las de nadie más.
  • Número de secuencia (k): si un chef prepara varios platos en un instante, agrega un pequeño incremento a sus etiquetas, por lo que cada plato tiene una etiqueta única.

Copo de nieve implementado en Go

Consulte este repositorio de GitHub para ver una implementación Go de la generación de ID de Snowflake

Fuentes

  1. https://blog.x.com/engineering/en_us/a/2010/anncing-snowflake
  2. https://en.wikipedia.org/wiki/Snowflake_ID
Declaración de liberación Este artículo se reproduce en: https://dev.to/alquama/implementing-snowflake-id-generator-3f8k?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3