La arquitectura de un acortador de URL describe el diseño interno y los mecanismos técnicos que componen un servicio de acortamiento de URL. Es un tema recurrente en entrevistas de diseño de sistemas y un excelente ejemplo para aprender los principios de diseño de servicios web escalables.
La arquitectura básica se compone de tres elementos. Primero, el motor de acortamiento, que recibe la URL larga, genera un código corto único y lo almacena en la base de datos. Segundo, el motor de redirección, que recibe las solicitudes a la URL acortada, consulta el destino en la base de datos y devuelve una respuesta 301 o 302. Tercero, el motor de analítica, que recopila y agrega los datos de clics para ofrecer estadísticas.
Existen tres métodos principales para generar códigos cortos: basado en contador (se convierte un ID secuencial a Base62), basado en hash (se toman los primeros N caracteres del hash MD5 o SHA256 de la URL) y generación aleatoria (se crea una cadena aleatoria y se verifica que no exista colisión). El método basado en contador es el más sencillo y no produce colisiones, por lo que suele elegirse como punto de partida. Su punto débil es que los códigos quedan en secuencia, de modo que las URL acortadas creadas por otras personas se pueden recorrer de forma mecánica. Cuando las URL no están pensadas para ser públicas, lo habitual es transformar el valor del contador antes de mostrarlo, o bien pasar a la generación aleatoria con comprobación de colisiones. Compartir un mismo contador entre varios servidores plantea además la cuestión de dónde se mantiene la unicidad de los identificadores.
La clave de la escalabilidad reside en la estrategia de caché. Una URL acortada se registra una vez y se lee cada vez que alguien la abre, por lo que la redirección genera muchas más lecturas que escrituras y una capa de caché con Redis o Memcached resulta muy eficaz. Mantener en caché las URL acortadas que más se abren reduce drásticamente las consultas a la base de datos y acorta el tiempo necesario para localizar el destino. La espera que percibe la persona que hace clic incluye además el viaje de ida y vuelta entre su dispositivo y el servidor, de modo que la caché no la determina por sí sola.
En cuanto al diseño de la base de datos, los almacenes clave-valor como DynamoDB o Redis son ideales para la búsqueda de URL acortadas. La estructura es simple: el código corto como clave y la URL original junto con metadatos como valor. Cuando las lecturas y escrituras dejan de caber en un solo nodo, cabe plantear un particionamiento que reparta los datos entre varios nodos tomando el código corto como criterio. Dividir solo por el primer carácter puede concentrar los registros en un nodo según cómo se generen los códigos, así que conviene elegir un reparto que quede equilibrado.