Generador de ID de Snowflake - Crear ID Distribuidos Únicos
Generador y analizador de ID de Snowflake gratuito. Genere ID únicos de 64 bits para sistemas distribuidos. Analice ID existentes para extraer marca de tiempo, ID de máquina y secuencia.
Generador de ID de Snowflake
Opcional: Marca de tiempo Unix en milisegundos (por defecto es el tiempo actual)
ID de Máquina (0-31)
ID de Centro de Datos (0-31)
Número de Secuencia (0-4095)
Documentación
¿Qué es un generador de identificadores Snowflake?
Un generador de identificadores Snowflake crea un número único de 64 bits a partir de una marca de tiempo, un identificador de máquina y un número de secuencia. Twitter creó el formato en 2010 para asignar a cada tuit un identificador que muchos servidores pudieran generar al mismo tiempo, sin tener que preguntarse entre sí «¿ya se ha utilizado este número?». Esta herramienta crea un identificador Snowflake a partir de los valores introducidos y muestra cómo esos valores ocupan los 64 bits.
Cómo funciona este generador de identificadores Snowflake
El generador recibe cuatro entradas:
- Marca de tiempo: una marca de tiempo Unix en milisegundos. Déjela en blanco para utilizar la hora actual.
- Identificador de máquina: un entero de 0 a 31 (5 bits). Este es el «identificador de trabajador» original de Twitter.
- Identificador del centro de datos: un entero de 0 a 31 (5 bits).
- Número de secuencia: un entero de 0 a 4095 (12 bits), utilizado para distinguir los identificadores creados en el mismo milisegundo.
La herramienta combina los cuatro valores en un identificador de 64 bits. Después muestra el resultado en binario, dividido en sus segmentos de marca de tiempo, centro de datos, máquina y secuencia.
La marca de tiempo se mide desde un punto inicial fijo llamado época de Twitter: 4 de noviembre de 2010, 1:42:54,657 UTC, es decir, 1.288.834.974.657 milisegundos después de la época Unix. Este generador no permite cambiar ese punto inicial. Cada identificador que produce se mide desde esa misma fecha fija.
Estructura del identificador Snowflake
Un identificador Snowflake es un entero de 64 bits dividido en cuatro partes, que se leen desde el bit más significativo hacia abajo:
| Bits | Campo | Rango |
|---|---|---|
| 1 | Bit de signo | siempre 0 |
| 41 | Marca de tiempo | milisegundos desde la época de Twitter |
| 5 | Identificador del centro de datos | 0–31 |
| 5 | Identificador de máquina (trabajador) | 0–31 |
| 12 | Número de secuencia | 0–4095 |
El bit inicial siempre es 0, por lo que un identificador Snowflake siempre es un número positivo. La marca de tiempo de 41 bits y el campo de secuencia de 12 bits son las dos partes que hacen útiles los identificadores Snowflake para ordenar: los identificadores creados después tienen un segmento de marca de tiempo mayor, por lo que aparecen después de los anteriores al ordenarlos.
Fórmula del identificador Snowflake
El generador crea el identificador mediante esta fórmula:
en la que d es el delta, t la marca de tiempo introducida en milisegundos, I el identificador final, c el identificador del centro de datos, m el identificador de máquina y s el número de secuencia.
<< es un desplazamiento de bits a la izquierda. Desplazar un número a la izquierda 22 bits equivale a multiplicarlo por 2²², es decir, por 4.194.304. Los desplazamientos (22, 17, 12) proceden directamente de las anchuras de los campos: el campo de secuencia tiene una anchura de 12 bits, por lo que el identificador de máquina se sitúa 12 bits más arriba; el campo de máquina tiene una anchura de 5 bits, por lo que el identificador del centro de datos se sitúa 17 bits más arriba (12 + 5); y así sucesivamente.
Cómo calcular un identificador Snowflake: ejemplo resuelto
Supongamos que alguien introduce:
- Marca de tiempo: 1.288.834.975.657 (exactamente 1.000 ms después de la época de Twitter)
- Identificador del centro de datos: 1
- Identificador de máquina: 1
- Número de secuencia: 0
Paso 1 — Calcular el delta. Reste la época de la marca de tiempo: 1.288.834.975.657 − 1.288.834.974.657 = 1.000.
Paso 2 — Desplazar cada campo a su posición.
- Marca de tiempo: 1.000 << 22 = 4.194.304.000
- Identificador del centro de datos: 1 << 17 = 131.072
- Identificador de máquina: 1 << 12 = 4.096
- Secuencia: 0
Paso 3 — Combinar mediante OR bit a bit. Como ninguno de los campos desplazados se superpone, sumarlos produce el mismo resultado que combinarlos mediante OR:
4.194.304.000 + 131.072 + 4.096 + 0 = 4.194.439.168
Ese es el identificador Snowflake correspondiente a esta entrada. La vista de resultados de la herramienta divide de nuevo la misma cadena binaria de 64 bits en un bloque de marca de tiempo de 41 bits, un bloque de centro de datos de 5 bits, un bloque de máquina de 5 bits y un bloque de secuencia de 12 bits, de modo que la estructura del número sigue siendo visible.
Dónde se utilizan los identificadores Snowflake
Twitter creó el formato para asignar identificadores únicos y aproximadamente ordenados por tiempo a los tuits de miles de máquinas de bases de datos, sin un contador central que todos los servidores tuvieran que consultar. Más tarde, Discord e Instagram adoptaron diseños similares de identificadores de 64 bits para mensajes y publicaciones. La misma idea aparece en la fragmentación de bases de datos, los identificadores de pedidos de sistemas de comercio electrónico y los registros de eventos de aplicaciones distribuidas. Es adecuada para cualquier entorno en el que muchas máquinas asignen identificadores de forma independiente y, aun así, necesiten que estos queden ordenados aproximadamente por tiempo.
Limitaciones de los identificadores Snowflake
Un generador Snowflake de producción normalmente mantiene su propio reloj en funcionamiento: incrementa el número de secuencia para cada identificador creado en el mismo milisegundo y espera al siguiente milisegundo cuando la secuencia alcanza 4.095. Esta herramienta no conserva memoria entre cálculos. Crea un identificador a partir de los valores introducidos, lo que resulta útil para explorar el formato, pero es diferente de un servicio de producción en funcionamiento.
El diseño tiene límites fijos, independientemente del servicio que lo implemente:
- Época fija: este generador solo acepta marcas de tiempo iguales o posteriores a 4 de noviembre de 2010 (la época de Twitter). Las fechas anteriores no se pueden codificar.
- Límite superior de la marca de tiempo: el campo de marca de tiempo de 41 bits se agota aproximadamente en julio de 2080. Después, el delta desde la época ya no cabe en 41 bits.
- Límite de la secuencia: una máquina solo puede emitir 4.096 identificadores distintos (0–4095) en el mismo milisegundo antes de que los valores se repitan.
- Espacio de máquinas: con 5 bits para cada uno de los identificadores de máquina y de centro de datos, una implementación dispone de 1.024 identidades de máquina distintas (32 × 32) que puede asignar sin colisiones.
- Ordenación local, no global: los identificadores solo se ordenan correctamente entre sí si proceden de máquinas cuyos relojes están sincronizados. La deriva de reloj entre máquinas puede romper el orden estricto por tiempo.
Historia del identificador Snowflake
Twitter anunció el formato de identificador Snowflake en 2010 como sustituto de los identificadores de base de datos sencillos autoincrementales, que no escalan entre muchos servidores de bases de datos independientes. El nombre procede de la idea de que, al igual que los copos de nieve reales, no hay dos identificadores generados iguales. Más tarde, el diseño se publicó como código abierto y otras grandes plataformas lo copiaron, con modificaciones, porque necesitaban lo mismo: identificadores únicos y ordenables generados por muchas máquinas a la vez.
Preguntas frecuentes
¿Qué es un identificador Snowflake? Un identificador Snowflake es un número de 64 bits compuesto por una marca de tiempo, un identificador de máquina y un número de secuencia, diseñado para que muchas máquinas puedan generar identificadores únicos sin coordinarse entre sí.
¿Cuál es la fórmula del identificador Snowflake?
id = ((timestamp − epoch) << 22) | (dataCenterId << 17) | (machineId << 12) | sequence, donde la época es una fecha inicial fija y << es un desplazamiento de bits a la izquierda.
¿Puedo cambiar la época en este generador? No. Esta herramienta siempre mide la marca de tiempo desde la época fija de Twitter, 4 de noviembre de 2010. No hay ningún campo para establecer una fecha inicial diferente.
¿Esta herramienta decodifica un identificador Snowflake existente? No. Solo crea un identificador nuevo a partir de la marca de tiempo, el identificador de máquina, el identificador del centro de datos y el número de secuencia introducidos; después muestra el desglose de bits de ese nuevo identificador.
¿Cuántos identificadores Snowflake puede generar una máquina por milisegundo? Hasta 4.096, ya que el campo de secuencia tiene una anchura de 12 bits (valores de 0 a 4.095).
¿Hasta qué año puede este generador producir marcas de tiempo válidas? Hasta aproximadamente julio de 2080. El campo de marca de tiempo de 41 bits puede contener como máximo unos 69,7 años medidos desde la época fija de 2010; después, el valor desborda el campo.
Referencias
- «Announcing Snowflake». Twitter Engineering Blog, 2010.
- "Snowflake ID." Wikipedia, https://en.wikipedia.org/wiki/Snowflake_ID