Saltar al contenido

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)

ID de Snowflake
2094810862656159744
00111010001001001000011011000010111110001
00000
00000
000000000000
Marca de tiempo (41 bits)
ID de Centro de Datos (5 bits)
ID de Máquina (5 bits)
Número de Secuencia (12 bits)
Calculadora de carga...
📚

Documentación

¿Qué es un generador de identificadores Snowflake?

Un generador de ID Snowflake construye 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 que las máquinas que generan ID no tuvieran que coordinarse entre sí. Muchos servidores pueden producir ID al mismo tiempo sin preguntar "¿ya se ha usado este número?". Esta herramienta construye un ID Snowflake con los valores que se introducen 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 único ID de 64 bits y muestra el resultado dividido en sus segmentos de marca de tiempo, máquina y secuencia.

La marca de tiempo se mide desde un punto de partida fijo llamado época de Twitter: el 4 de noviembre de 2010, a las 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 de partida; todos los ID que produce se miden desde esa única 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:

BitsCampoRango
1Bit de signosiempre 0
41Marca de tiempomilisegundos desde la época de Twitter
5Identificador del centro de datos0–31
5Identificador de máquina (trabajador)0–31
12Número de secuencia0–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:

1delta = timestamp - 1288834974657
2id = (delta << 22) | (dataCenterId << 17) | (machineId << 12) | sequence
3

<< 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 ID Snowflake para estos datos. La vista de resultados de la herramienta vuelve a dividir la misma cadena binaria de 64 bits en un bloque de marca de tiempo de 41 bits, un bloque de máquina de 10 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 obtener ID únicos y ordenados aproximadamente por tiempo en muchas máquinas, sin un contador central que cada servidor tuviera que consultar. Otras plataformas copiaron la idea. Discord, por ejemplo, indica que usa el formato snowflake de Twitter para sus ID. La misma idea aparece en la fragmentación de bases de datos, en los ID de pedidos de los sistemas de comercio electrónico y en los registros de eventos de las aplicaciones distribuidas: en cualquier lugar donde muchas máquinas necesiten asignar ID de forma independiente y mantenerlos ordenados aproximadamente por tiempo.

Limitaciones de los identificadores Snowflake

Un generador Snowflake de producción suele mantener su propio reloj en marcha: aumenta el número de secuencia por cada ID creado en el mismo milisegundo y espera al siguiente milisegundo cuando la secuencia llega a 4.095. Esta herramienta no conserva memoria entre cálculos. Construye un ID a partir de la marca de tiempo, los identificadores y el número de secuencia que se introduzcan, lo que la hace útil para explorar el formato pero distinta 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 al 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 creó Snowflake mientras trasladaba su almacenamiento de MySQL a Cassandra, que no dispone de ninguna función para ID secuenciales. Los objetivos de diseño eran ID de menos de 64 bits, únicos, ordenados aproximadamente por tiempo y directamente ordenables. La versión inicial se publicó en 2010 y más tarde se retiró en favor de una reescritura interna. Otras grandes plataformas copiaron el diseño, con modificaciones, porque necesitaban lo mismo: ID ú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 alrededor de 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 (las notas de Twitter redondean esta cifra a 69 años); después, el valor desborda el campo.

Referencias

  1. Twitter. Snowflake README (etiqueta snowflake-2010), GitHub. Snowflake README — ID sin coordinación, ordenados aproximadamente por tiempo y de menos de 64 bits; tiempo de 41 bits (69 años), ID de máquina de 10 bits (1.024 máquinas), secuencia de 12 bits (4.096 por máquina y por milisegundo); motivado por el traslado de MySQL a Cassandra.
  2. Twitter. IdWorker.scala (etiqueta snowflake-2010), GitHub. Snowflake IdWorker.scala — twepoch = 1288834974657; 5 bits de trabajador, 5 bits de centro de datos, 12 bits de secuencia; desplazamientos de 12, 17 y 22.
  3. Discord. API Reference: Snowflakes. Referencia de la API de Discord — Discord usa el formato snowflake de Twitter para sus ID.
  4. Twitter. Snowflake README (master), GitHub. Aviso de retirada de Snowflake — la versión inicial se publicó en 2010 y se ha retirado.