Generador de UUID
UUID Generado
Generador de UUID
Introducción
Un Identificador Único Universal (UUID) es un número de 128 bits utilizado para identificar información en sistemas informáticos. Los UUID son estandarizados por la Open Software Foundation (OSF) como parte del Entorno de Computación Distribuida (DCE). Estos identificadores están diseñados para ser únicos tanto en el espacio como en el tiempo, lo que los hace ideales para diversas aplicaciones en sistemas distribuidos y más allá.
Esta herramienta generadora de UUID te permite crear tanto UUIDs de versión 1 (basados en tiempo) como UUIDs de versión 4 (aleatorios). Estos identificadores son útiles en varios escenarios donde se requiere identificación única, como claves de base de datos, sistemas distribuidos y protocolos de red.
Cómo funcionan los UUIDs
Estructura de UUID
Un UUID se representa típicamente como 32 dígitos hexadecimales, mostrados en cinco grupos separados por guiones, en la forma 8-4-4-4-12 para un total de 36 caracteres (32 caracteres alfanuméricos y 4 guiones). Por ejemplo:
550e8400-e29b-41d4-a716-446655440000
Los 128 bits de un UUID se dividen en campos específicos, cada uno llevando diferente información dependiendo de la versión del UUID:
- 32 bits para el campo time_low
- 16 bits para el campo time_mid
- 16 bits para el campo time_hi_and_version
- 8 bits para el campo clock_seq_hi_and_reserved
- 8 bits para el campo clock_seq_low
- 48 bits para el campo node
Aquí hay un diagrama que ilustra la estructura del UUID:
Versiones de UUID
Existen varias versiones de UUID, cada una con su propio método de generación:
- Versión 1 (basada en tiempo): Utiliza la marca de tiempo actual y la dirección MAC de la computadora.
- Versión 2 (Seguridad DCE): Similar a la versión 1, pero incluye un identificador de dominio local.
- Versión 3 (basada en nombre, MD5): Generada mediante el hash de un identificador de espacio de nombres y un nombre.
- Versión 4 (aleatoria): Generada utilizando un número aleatorio o pseudoaleatorio.
- Versión 5 (basada en nombre, SHA-1): Similar a la versión 3, pero utiliza hashing SHA-1.
Esta herramienta se centra en generar UUIDs de versión 1 y versión 4.
Fórmula
Generación de UUID de Versión 1
Los UUIDs de versión 1 se generan utilizando los siguientes componentes:
- Marca de tiempo: Un valor de 60 bits que representa el número de intervalos de 100 nanosegundos desde el 15 de octubre de 1582 (la fecha de la reforma gregoriana al calendario cristiano).
- Secuencia de reloj: Un valor de 14 bits utilizado para evitar duplicados en caso de que el reloj se ajuste hacia atrás.
- Nodo: Un valor de 48 bits, generalmente derivado de la dirección MAC de la computadora.
La fórmula para generar un UUID de versión 1 se puede expresar como:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
Generación de UUID de Versión 4
Los UUIDs de versión 4 se generan utilizando un generador de números aleatorios criptográficamente fuerte. La fórmula es simplemente:
UUID = random_128_bit_number
Con bits específicos establecidos para indicar la versión (4) y la variante.
Casos de Uso
Los UUIDs tienen numerosas aplicaciones en varios dominios de la informática y la ingeniería de software:
-
Claves de base de datos: Los UUIDs se utilizan a menudo como claves primarias en bases de datos, especialmente en sistemas distribuidos donde múltiples nodos pueden estar generando registros simultáneamente.
-
Sistemas distribuidos: En sistemas distribuidos a gran escala, los UUIDs ayudan a identificar de manera única recursos, transacciones o eventos en múltiples nodos o centros de datos.
-
Direccionamiento de contenido: Los UUIDs se pueden utilizar para crear identificadores únicos para contenido en sistemas de almacenamiento direccionables por contenido.
-
Gestión de sesiones: Las aplicaciones web a menudo utilizan UUIDs para gestionar sesiones de usuario, asegurando que cada sesión tenga un identificador único.
-
Identificación de dispositivos IoT: En aplicaciones de Internet de las Cosas (IoT), los UUIDs se pueden utilizar para identificar de manera única dispositivos individuales en una red.
Alternativas
Si bien los UUIDs son ampliamente utilizados, existen enfoques alternativos para generar identificadores únicos:
-
IDs autoincrementales: Simples y comúnmente utilizados en sistemas de base de datos únicos, pero no adecuados para entornos distribuidos.
-
IDs basados en tiempo: Pueden ser útiles para datos ordenados por tiempo, pero pueden enfrentar problemas de colisión en escenarios de alta concurrencia.
-
IDs de Snowflake: Desarrollados por Twitter, estos IDs combinan la marca de tiempo y el número de trabajador para generar IDs únicos en sistemas distribuidos.
-
ULID (Identificador Universal Único Lexicográficamente Ordenable): Una alternativa más reciente que busca ser más amigable para los humanos y ordenable que los UUIDs.
Historia
El concepto de UUIDs fue introducido por primera vez en el Sistema de Computación de Red Apollo y más tarde estandarizado por la Open Software Foundation (OSF) como parte del Entorno de Computación Distribuida (DCE) en la década de 1990. La especificación inicial se publicó en 1997 como ISO/IEC 11578:1996 y se revisó más tarde en 2005 como parte de ISO/IEC 9834-8:2005.
Hitos clave en la historia de UUID:
- 1980s: Apollo Computer desarrolla el concepto de UUID para su Sistema de Computación de Red.
- 1997: Primera especificación de UUID publicada como ISO/IEC 11578:1996.
- 2005: Especificación de UUID revisada y publicada como parte de ISO/IEC 9834-8:2005.
- 2009: RFC 4122 define el formato de UUID y los algoritmos de generación utilizados hoy en día.
Con el tiempo, los UUIDs se han convertido en una herramienta esencial en sistemas distribuidos y diseño de bases de datos, con varias implementaciones y adaptaciones en diferentes lenguajes de programación y plataformas.
Ejemplos de Código
Aquí hay ejemplos de generación de UUIDs en varios lenguajes de programación:
import uuid
## Generar un UUID de Versión 4 (aleatorio)
random_uuid = uuid.uuid4()
print(f"UUID de Versión 4: {random_uuid}")
## Generar un UUID de Versión 1 (basado en tiempo)
time_based_uuid = uuid.uuid1()
print(f"UUID de Versión 1: {time_based_uuid}")
Referencias
- Leach, P., Mealling, M., & Salz, R. (2005). Un espacio de nombres de Identificador Único Universal (UUID) URN. RFC 4122. https://tools.ietf.org/html/rfc4122
- Organización Internacional de Normalización. (2005). Tecnología de la información – Interconexión de Sistemas Abiertos – Procedimientos para la operación de Autoridades de Registro de OSI: Generación y registro de Identificadores Únicos Universales (UUIDs) y su uso como componentes de Identificadores de Objetos ASN.1. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Identificador único universal. (2023). En Wikipedia. https://es.wikipedia.org/wiki/Identificador_único_universal
- ID de Snowflake. (2023). En Wikipedia. https://es.wikipedia.org/wiki/ID_de_Snowflake
- Especificación ULID. (n.d.). GitHub. https://github.com/ulid/spec