Generador de UUID
UUID generat
Generador de UUID
Introducció
Un Identificador Universalment Únic (UUID) és un número de 128 bits utilitzat per identificar informació en sistemes informàtics. Els UUID són estàndarditzats per la Open Software Foundation (OSF) com a part de l'Entorn de Computació Distribuïda (DCE). Aquests identificadors estan dissenyats per ser únics tant en l'espai com en el temps, cosa que els fa ideals per a diverses aplicacions en sistemes distribuïts i més enllà.
Aquest eina generadora de UUID permet crear tant UUIDs de versió 1 (basats en el temps) com UUIDs de versió 4 (aleatoris). Aquests identificadors són útils en diversos escenaris on es requereix una identificació única, com ara claus de bases de dades, sistemes distribuïts i protocols de xarxa.
Com funcionen els UUIDs
Estructura del UUID
Un UUID es representa típicament com a 32 dígits hexadecimals, mostrats en cinc grups separats per guions, en la forma 8-4-4-4-12 per un total de 36 caràcters (32 caràcters alfanumèrics i 4 guions). Per exemple:
550e8400-e29b-41d4-a716-446655440000
Els 128 bits d'un UUID es divideixen en camps específics, cadascun portant informació diferent depenent de la versió del UUID:
- 32 bits per al camp time_low
- 16 bits per al camp time_mid
- 16 bits per al camp time_hi_and_version
- 8 bits per al camp clock_seq_hi_and_reserved
- 8 bits per al camp clock_seq_low
- 48 bits per al camp node
Aquí teniu un diagrama que il·lustra l'estructura del UUID:
Versions de UUID
Hi ha diverses versions de UUID, cadascuna amb el seu propi mètode de generació:
- Versió 1 (Basada en el temps): Utilitza la marca de temps actual i l'adreça MAC de l'ordinador.
- Versió 2 (Seguretat DCE): Similar a la versió 1, però inclou un identificador de domini local.
- Versió 3 (Basada en nom, MD5): Generada mitjançant la hash d'un identificador d'espai de noms i un nom.
- Versió 4 (Aleatori): Generada mitjançant un generador de números aleatoris o pseudo-aleatoris.
- Versió 5 (Basada en nom, SHA-1): Similar a la versió 3, però utilitza hashing SHA-1.
Aquesta eina se centra en generar UUIDs de versió 1 i versió 4.
Fórmula
Generació de UUID de versió 1
Els UUIDs de versió 1 es generen utilitzant els següents components:
- Marca de temps: Un valor de 60 bits que representa el nombre d'intervals de 100 nanosegons des del 15 d'octubre de 1582 (la data de la reforma gregoriana del calendari cristià).
- Seqüència d'horari: Un valor de 14 bits utilitzat per evitar duplicats en cas que el rellotge es configuri cap enrere.
- Node: Un valor de 48 bits, normalment derivat de l'adreça MAC de l'ordinador.
La fórmula per generar un UUID de versió 1 es pot expressar com:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
Generació de UUID de versió 4
Els UUIDs de versió 4 es generen mitjançant un generador de números aleatoris criptogràficament segur. La fórmula és simplement:
UUID = random_128_bit_number
Amb bits específics establerts per indicar la versió (4) i la variant.
Casos d'ús
Els UUIDs tenen nombroses aplicacions a través de diversos dominis de la informàtica i l'enginyeria de programari:
-
Claus de bases de dades: Els UUIDs s'utilitzen sovint com a claus primàries en bases de dades, especialment en sistemes distribuïts on múltiples nodes poden estar generant registres simultàniament.
-
Sistemes distribuïts: En sistemes distribuïts a gran escala, els UUIDs ajuden a identificar de manera única recursos, transaccions o esdeveniments a través de múltiples nodes o centres de dades.
-
Adreçament de contingut: Els UUIDs es poden utilitzar per crear identificadors únics per al contingut en sistemes d'emmagatzematge amb adreçament per contingut.
-
Gestió de sessions: Les aplicacions web sovint utilitzen UUIDs per gestionar sessions d'usuari, assegurant que cada sessió tingui un identificador únic.
-
Identificació de dispositius IoT: En aplicacions d'Internet de les Coses (IoT), els UUIDs es poden utilitzar per identificar de manera única dispositius individuals en una xarxa.
Alternatives
Tot i que els UUIDs són àmpliament utilitzats, hi ha enfocaments alternatius per generar identificadors únics:
-
IDs auto-incrementals: Simples i comunament utilitzats en sistemes de bases de dades individuals, però no adequats per a entorns distribuïts.
-
IDs basats en el temps: Poden ser útils per a dades ordenades per temps, però poden tenir problemes de col·lisió en escenaris d'alta concurrència.
-
IDs de floc de neu: Desenvolupats per Twitter, aquests IDs combinen marca de temps i número de treballador per generar IDs únics en sistemes distribuïts.
-
ULID (Identificador Universalment Únic Lexicogràficament Ordenable): Una alternativa més recent que pretén ser més amigable per a humans i ordenable que els UUIDs.
Història
El concepte de UUIDs es va introduir per primera vegada en el Sistema de Computació de Xarxa Apollo i més tard es va estàndarditzar per la Open Software Foundation (OSF) com a part de l'Entorn de Computació Distribuïda (DCE) als anys 90. La especificació inicial es va publicar el 1997 com a ISO/IEC 11578:1996 i més tard es va revisar el 2005 com a part de l'ISO/IEC 9834-8:2005.
Fites clau en la història dels UUIDs:
- Anys 1980: Apollo Computer desenvolupa el concepte de UUID per al seu Sistema de Computació de Xarxa.
- 1997: Primeres especificacions de UUID publicades com a ISO/IEC 11578:1996.
- 2005: Especificació de UUID revisada i publicada com a part de l'ISO/IEC 9834-8:2005.
- 2009: RFC 4122 defineix el format de UUID i els algorismes de generació utilitzats avui dia.
Amb el temps, els UUIDs s'han convertit en una eina essencial en sistemes distribuïts i disseny de bases de dades, amb diverses implementacions i adaptacions a través de diferents llenguatges de programació i plataformes.
Exemples de codi
Aquí teniu exemples de generació de UUIDs en diversos llenguatges de programació:
import uuid
## Generar un UUID de versió 4 (aleatori)
random_uuid = uuid.uuid4()
print(f"UUID de versió 4: {random_uuid}")
## Generar un UUID de versió 1 (basat en el temps)
time_based_uuid = uuid.uuid1()
print(f"UUID de versió 1: {time_based_uuid}")
Referències
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Identificador universalment únic. (2023). A Wikipedia. https://ca.wikipedia.org/wiki/Identificador_universalment_%C3%B9nic
- ID de floc de neu. (2023). A Wikipedia. https://ca.wikipedia.org/wiki/ID_de_floc_de_neu
- Especificació ULID. (n.d.). GitHub. https://github.com/ulid/spec