- Explora cómo asignar IDs a dispositivos u objetos que sean absolutamente irrepetibles, comparando enfoques aleatorios (
random) y deterministas (deterministic)
- El enfoque aleatorio puede llevar la probabilidad de colisión a prácticamente 0 usando una cantidad de bits suficientemente grande, con niveles que van desde UUID (122 bits) hasta el límite de cómputo de todo el universo (798 bits)
- En el enfoque determinista se proponen varios esquemas, como contador central, jerarquía delegada (Dewey), árbol binario (Binary) y token (Token), y se analizan mediante simulación las características de crecimiento de la longitud del ID en cada caso
- También se presenta una demostración matemática de que todos los esquemas deterministas no pueden evitar el crecimiento lineal en el peor caso
- En conclusión, incluso con expansión a escala cósmica, el método práctico y eficiente es generar IDs aleatorios, mientras que los enfoques deterministas resultan ineficientes
La necesidad de los IDs únicos y el planteamiento del problema
- La identificación de objetos es la base de todos los sistemas, desde manufactura y logística hasta comunicaciones y seguridad, y al escalar masivamente, asignar IDs sin duplicados se vuelve un reto clave
- Incluso si la humanidad se expandiera a escala galáctica, seguiría siendo necesario un sistema de IDs sin duplicados
- El problema se formula como: “¿cómo podemos crear IDs que jamás se repitan?”
Enfoque aleatorio (Random)
- El método más simple es elegir un número al azar
- Puede generarse en cualquier lugar sin administración central ni sincronización
- La probabilidad de colisión puede controlarse aumentando la cantidad de bits, hasta llevarla a un valor prácticamente 0
- Con UUID (122 bits), se espera una colisión al generar alrededor de $2^{61}$ IDs
- Si se considera el límite de cómputo de todo el universo (10¹²⁰ operaciones), se requieren 798 bits
- A nivel atómico (10⁸⁰ unidades) serían 532 bits, y para nanobots de 1g (10⁵⁶ unidades), 372 bits
- Es importante contar con verdadera aleatoriedad, por lo que se recomienda usar CSPRNG o fuentes cuánticas de números aleatorios
- Deben prohibirse semillas comunes o IDs constantes (por ejemplo, all-zero)
Enfoque determinista (Deterministic)
- El esquema de contador central hace que un único servidor emita IDs secuenciales
- Debido a los problemas de accesibilidad, se propone una estructura delegada entre satélites y dispositivos (Dewey)
- El esquema Dewey usa IDs jerárquicos con forma
A.B.C, representados con codificación Elias omega
- Según la estructura del árbol, puede tener crecimiento logarítmico o lineal
- El esquema Binary divide el espacio de IDs en un árbol binario y en algunos casos es más eficiente que Dewey
- 2-Adic Valuation garantiza unicidad matemática y es una variante de Binary
- El esquema Token muestra crecimiento logarítmico en estructuras en cadena, pero cuando aumenta el ancho pasa a ser lineal
Demostración de la inevitabilidad del crecimiento lineal
- Partiendo de que todas las rutas de asignación de IDs deben ser únicas, se calcula el número de rutas posibles
- Si el número de nodos es n, la cantidad de IDs necesarias crece como $2^{n-1}$
- Por lo tanto, la longitud del ID debe ser al menos O(n), es decir, el crecimiento lineal es inevitable en el peor caso
- Ningún algoritmo puede mantener crecimiento logarítmico en todos los casos
Simulación de modelos de expansión
- Se prueba con varios modelos de crecimiento, como Random Recursive Tree, Preferential Attachment y Fitness Model
- En pequeña escala (2,048 nodos), Binary destaca; Dewey y Token varían según el caso
- En el modelo Preferential, Dewey es el más eficiente
- En el modelo Fitness, Dewey y Binary tienen rendimiento similar
- Incluso en experimentos de un millón de nodos, Dewey y Token mantienen crecimiento logarítmico
- La longitud del ID puede aproximarse como ≈ 6.55 × ln(n)
Modelo de expansión a escala galáctica y cósmica
- La dispersión entre planetas se modela como un frente de onda que avanza a velocidad constante
- Cada planeta genera cerca de 10⁹ IDs antes de propagarse al siguiente planeta
- Con un radio galáctico de unas 2,121 etapas planetarias, la longitud del ID llega a aproximadamente 288,048 bits
- Si además se considera la expansión entre galaxias (unas 7,816 etapas), se necesitan unos 2,200 millones de bits (281MB)
- Los enfoques deterministas son ineficientes, y el enfoque aleatorio (798 bits o menos) resulta abrumadoramente más eficiente
Seguridad y consideraciones adicionales
- Para evitar la falsificación de IDs, puede aplicarse un sistema de verificación basado en firmas
- En los IDs aleatorios puede usarse la clave pública como ID; en los esquemas deterministas, el padre firma la clave del hijo
- También se requieren códigos de corrección de errores y control de versiones
- En el caso de objetos que no pueden almacenar un ID (por ejemplo, planetas), se administran mapeando varios IDs
- Se discute si un ID debe persistir cuando se reemplazan componentes, como en el barco de Teseo
- Conceptos relacionados: Decentralized Identifiers (DID) y Ancestry Labeling Schemes
Conclusión
- Los esquemas deterministas son teóricamente interesantes, pero poco prácticos
- La generación de IDs aleatorios sigue siendo realista y eficiente incluso a escala cósmica
- Hacer que la probabilidad de colisión de IDs sea “prácticamente 0” es la opción más segura y práctica
4 comentarios
Lean el original sí o sí. Me encantó leerlo porque explica todo de forma visual con fórmulas y simulaciones.
Supongo que si se hace con base en el tiempo, habría que verlo como algo lineal, ¿no..?
Tendré que revisar un poco el original. Es una historia interesante.
Si ocurre una colisión, ¿sería tener una mala suerte a escala cósmica... (?)
Comentarios de Hacker News
Este análisis no es del todo justo. Al diseñar UUID se considera la localidad (locality), es decir, la velocidad de la luz, pero al calcular la probabilidad de colisión eso se ignora. En la práctica, para que una colisión importe, los dos UUID tendrían que entrar en contacto causal (causal contact) después de generarse. Por eso, aplicar sin más la paradoja del cumpleaños (birthday paradox) es un enfoque equivocado. Si se toma en cuenta la localidad, el tamaño de UUID necesario probablemente sería mucho menor que los 800 bits que menciona el artículo. No he hecho el cálculo matemático, pero no creo que haga falta más de 256 bits. Me encanta que HN sea uno de los pocos lugares donde este tipo de discusiones técnicas minuciosas ocurren en serio
Al calcular cuántos objetos se pueden direccionar, también hay que tener en cuenta que la dirección de cada objeto debe almacenarse al menos una vez en algún lugar. Si para almacenar un bit se necesitan Npb partículas, entonces al aumentar la cantidad de bits de dirección disminuye el número de objetos direccionables. Por tanto, el número máximo de objetos direccionables puede expresarse con una relación como Nthg = Np / (Npb * f(Ntng))
Una vez tuve que defender la idea de que con un ID aleatorio de 256 bits era suficiente y no hacía falta comprobar colisiones. Mis colegas querían agregar una lógica compleja de verificación de colisiones, pero les expliqué que 2^256 está en una escala comparable al número de átomos del universo observable. Los convencí de que era más probable que el datacenter explotara millones de veces antes de que ocurriera una colisión. Al final llegamos a la conclusión de que incluso 128 bits bastaban
Hay cálculos según los cuales, si se asignara un ID a cada átomo, harían falta unos 532 bits. Pero en la práctica seguramente también querríamos asignar ID a grupos de átomos, como microchips, autos, etc., así que podría ser más grande
Existe la idea de representar IDs con una baraja de cartas. Si cada una de las 52 cartas se representa con un carácter Unicode, resulta fácil de leer, difícil de editar manualmente y favorable para reconocer patrones. Si además barajas una baraja real y la capturas con una cámara, también puede servir como semilla aleatoria. Una idea parecida es DiceKeys
Excelente visualización e intuición. Yo he diseñado bases de datos alrededor de identificadores aleatorios lo más pequeños posible. Pienso que este tipo de identificadores universales son, de hecho, el único verdadero “disco dorado”. En la gestión de datos científicos o en bibliotecología, este concepto está subestimado. Muchos problemas de grandes organizaciones se habrían resuelto con un mejor diseño de identificadores.
Lecturas relacionadas: Identifiers Deep Dive, Trible Structure
Estoy leyendo más o menos por la página 281 de The Galaxy, and the Ground Within de Becky Chambers.
Ejemplo de un mensaje en el libro:
Me encanta esta serie. Me parece interesante que ese universo multiespecie use un sistema de direcciones por rutas acordadas centralmente
Hace poco conocí los Snowflake ID. Los usan Twitter, Discord, Instagram, Mastodon y otros. Es una forma de reducir el tamaño del ID combinando timestamp + aleatoriedad, y me dio pena que el artículo no los mencionara.
Ver: wiki de Snowflake ID, video de Tom Scott.
Si reemplazas algunos bits del timestamp de Snowflake por bits aleatorios, parecería posible generar 4 mil millones de IDs por segundo
Me pregunto si sería posible crear IDs a partir de fenómenos observables. Gracias a rasgos distinguibles por tiempo y distancia, tal vez se podría garantizar unicidad. Por ejemplo, el patrón de luz estelar en un instante específico solo puede verlo una persona. Sería parecido a usar ruido como entropía, como con una lámpara de lava. Si se pudiera definir un sistema de coordenadas para todo el universo, quizá se podría crear un ID único con tiempo local + x + y + z + salt
El enfoque de UUID aleatorio es muy superior en términos de longevidad. El número de dispositivos que pueden operar al mismo tiempo es limitado y, a diferencia de un UUID basado en árbol, cuando un dispositivo se descarta su ID puede reutilizarse. En la práctica, parece que lo más útil sería un algoritmo híbrido que combine una raíz basada en ubicación + bits aleatorios subordinados