- Compiler Explorer inicialmente usaba un enfoque de guardar todo el estado directamente en la URL
- Como las URL se volvieron demasiado largas, se introdujo el servicio de acortamiento de URLs goo.gl de Google, lo que generó una complejidad con varias redirecciones
- Desde 2018, debido al problema del límite de longitud de las URL y la dificultad de mantenimiento, se cambió a una estructura que usa un almacenamiento propio basado en S3 y DynamoDB
- Sin embargo, como Google cerrará el servicio goo.gl en agosto de 2025, surgió la necesidad de gestionar por cuenta propia la persistencia de los enlaces acortados del pasado
- Hasta ahora se han rescatado más de 12,000 enlaces heredados, lo que muestra la importancia de la preservación del conocimiento de programación y de operar servicios sostenibles
Garantía permanente e historia de los enlaces de Compiler Explorer
Diseño inicial y por qué se adoptó goo.gl
- En 2012, Compiler Explorer adoptó una estructura que codificaba directamente en la URL todo el estado del compilador
- A medida que aumentaba la información de estado, surgió el problema de que las URL se volvían excesivamente largas
- Para acortar las URL, en 2014 se aplicó el servicio de acortamiento goo.gl de Google
- Ofrecía enlaces cortos con formato
goo.gl/abc123, y al hacer clic redirigía a la URL larga original para restaurar el estado
- Stack Overflow impuso restricciones al uso de enlaces acortados en 2016, lo que limitó el método existente
- Todos los enlaces basados en goo.gl se vieron afectados por el riesgo de ocultar enlaces maliciosos
- Como no querían almacenar datos de usuario, como medida temporal crearon su propia ruta con formato
godbolt.org/g/abc123
- Al acceder a
godbolt.org/g/abc123, volvía a redirigir a goo.gl/abc123
- En ese proceso, finalmente regresaba a una URL larga de
godbolt.org
- Esto provocaba una estructura compleja por la existencia de múltiples redirecciones
- Más adelante, el uso de la API de Google simplificó parcialmente el proceso de redirección
Introducción de almacenamiento propio y gestión de enlaces
- Desde 2018, el límite de longitud de las URL y la incomodidad de comprimir datos empezaron a surgir con frecuencia como problemas
- Se implementó una estructura de almacenamiento propia usando S3 y DynamoDB
- Los valores de entrada se hashean y se guardan en S3 en forma de documentos JSON
- Al acceder a un enlace corto (
godbolt.org/z/hashbit), se consulta el mapeo en DynamoDB
- Si el valor hash incluía groserías u otras palabras inapropiadas, se implementó una verificación para evitarlo agregando un elemento aleatorio
- Se resolvió así el problema de enlaces basados en hash con términos inapropiados y también se vivieron bugs relacionados (por ejemplo, issue #1297)
- Actualmente todavía se sigue soportando el formato de dirección
godbolt.org/g/abc123
- Pese a la guía oficial de Google, el servicio goo.gl pasó a modo de solo lectura y está programado para su cierre total en agosto de 2025
- Los enlaces acortados basados en goo.gl dejarán de poder resolverse
- Como el formato
godbolt.org/g/abc123 puede prolongar su vida al gestionarse directamente, se llevó a cabo un trabajo estructurado de rescate sobre esa estructura de enlaces
Recolección masiva y archivado de enlaces heredados
- Recientemente se avanzó en rastrear y crear una base de datos de enlaces heredados desde todas las fuentes posibles (búsqueda, data dumps, weblogs, etc.)
- Google Web Search API
- GitHub API
- logs de sus propios servidores
- data dump de Stack Overflow en archive.org
- datos de páginas web archivadas en Archive.org
- Se logró recuperar aproximadamente 12,298 enlaces cortos
- Internamente se empezó a usar una base de datos propia de enlaces en lugar de goo.gl (PR relacionado: #7724)
- También se seguirá recopilando y asegurando de forma continua cualquier enlace
godbolt.org/g/abc123 que aún no haya sido descubierto
- Si la comunidad conoce enlaces que todavía no estén registrados, se pide acceder a ellos directamente o avisar a los administradores para complementar la base de datos
Filosofía del proyecto y la importancia de poseer la infraestructura
- Este caso confirmó el riesgo de depender únicamente de la continuidad de un servicio externo (por ejemplo, Google) para infraestructura importante
- La gestión de enlaces cortos y la estructura de respaldo eran medidas temporales, y para prometer URLs realmente permanentes es necesario gestionar directamente todo el servicio
- En el proceso de rescatar enlaces heredados antiguos, como si fuera arqueología digital, se reconoció que cada enlace es una huella del conocimiento compartido, de preguntas y de explicaciones de conceptos de alguien
- Este acto de almacenar y preservar se conecta directamente con el archivo histórico de la comunidad de programación
- Si encuentras un enlace antiguo de Compiler Explorer, hacer clic en él aunque sea ahora es una forma de contribuir a preservar el conocimiento de internet
- Esta vez, al depender de infraestructura bajo control directo y no de terceros, se puede cumplir la promesa de garantizar su continuidad
Disclaimer
- Este texto fue escrito por una persona, y se usó un LLM en el proceso de recomendación de enlaces y revisión gramatical
1 comentarios
Comentarios de Hacker News