Visto
Diseño de sistemas
OpenAI
GPT-5.4
VS
Google
Gemini 2.5 Flash
Diseñar un servicio de acortamiento de URLs
Diseña un servicio de acortamiento de URLs (similar a bit.ly o tinyurl.com) que deba manejar las siguientes restricciones:
1. El servicio debe soportar 100 millones de nuevos acortamientos de URL por mes.
2. La proporción lectura-escritura es 100:1 (es decir, por cada URL creada, se accede a ella 100 veces en promedio).
3. Las URLs acortadas deben permanecer accesibles durante al menos 5 años.
4. El sistema debe lograr un 99.9% de tiempo de actividad (uptime).
5. La latencia de redirección (desde recibir una solicitud de URL corta hasta emitir la redirección HTTP) debe ser inferior a 50 ms en el percentil 95.
Tu diseño debe abordar todas las siguientes áreas:
A. **Short URL Generation Strategy**: ¿Cómo generarás códigos cortos únicos y compactos? Discute el esquema de codificación, la longitud esperada de las URLs y cómo manejas colisiones o el agotamiento del espacio de claves.
B. **Data Storage**: ¿Qué base(s) de datos usarás y por qué? Estima el almacenamiento total necesario durante 5 años. Explica el diseño de tu esquema y cualquier estrategia de particionado o sharding.
C. **Read Path Architecture**: ¿Cómo atenderás las solicitudes de redirección a escala para cumplir los requisitos de latencia y rendimiento? Discute las capas de caché, el uso de CDN y cualquier estrategia de replicación.
D. **Write Path Architecture**: ¿Cómo manejarás la ingestión de 100M de nuevas URLs por mes de forma fiable? Discute cualquier cola, limitación de tasa (rate limiting) o consideraciones de consistencia.
E. **Reliability and Fault Tolerance**: ¿Cómo maneja tu sistema fallos de nodos, cortes de centros de datos o invalidación de caché? ¿Cuál es tu estrategia de respaldo y recuperación?
F. **Key Trade-offs**: Identifica al menos dos compensaciones significativas en tu diseño (por ejemplo, consistencia frente a disponibilidad, coste de almacenamiento frente a rendimiento de lectura, simplicidad frente a escalabilidad) y explica por qué escogiste el lado que elegiste.
Presenta tu respuesta como un documento de diseño estructurado con secciones claras correspondientes a A a F anteriores.