Este documento recopila preguntas comunes sobre Diseño de Sistemas utilizadas en entrevistas técnicas de nivel medio a senior. Incluye explicaciones, ejemplos visuales y conceptos clave que te ayudarán a estructurar soluciones escalables y robustas.
🔹 Cada pregunta está explicada directamente en este archivo.
Puedes navegar usando el índice para ir a la sección que más te interese.
- ¿Qué es el diseño de sistemas?
- ¿Qué pasos sigues para diseñar un sistema desde cero?
- ¿Qué es la escalabilidad horizontal vs. vertical?
- ¿Qué es la tolerancia a fallos?
- ¿Qué es un balanceador de carga?
- ¿Qué es un CDN y para qué se usa?
- ¿Qué es una base de datos relacional vs. no relacional?
- ¿Qué es la partición o "sharding"?
- ¿Qué es la caché y cómo mejora el rendimiento?
- ¿Qué es CAP Theorem?
- ¿Qué es una cola de mensajes y por qué es útil?
- ¿Qué métricas considerarías para evaluar el rendimiento de un sistema?
- ¿Cómo diseñarías un sistema tipo URL Shortener como bit.ly?
- ¿Cómo diseñarías un sistema de chat en tiempo real?
- ¿Cómo garantizarías alta disponibilidad en un sistema?
Es el proceso de definir la arquitectura, componentes y datos de un sistema de software. Se enfoca en cómo los distintos módulos interactúan y escalan.
- Requisitos funcionales y no funcionales.
- Estimación de tráfico y carga.
- Diseño de alto nivel (componentes principales).
- Diseño de base de datos.
- Arquitectura detallada (API, colas, cache, etc.).
- Consideraciones de escalabilidad, disponibilidad y resiliencia.
- Seguridad y monitoreo.
- Horizontal: Añadir más máquinas.
- Vertical: Añadir más recursos a una sola máquina.
💡 Escalar horizontalmente suele ser preferido por su flexibilidad.
Es la capacidad de un sistema de seguir funcionando incluso si una parte falla. Se logra con redundancia, replicación y manejo de errores.
Es un componente que distribuye el tráfico entre múltiples servidores para evitar sobrecarga y mejorar disponibilidad.
Un CDN (Content Delivery Network) es una red de servidores distribuidos que entregan contenido estático (imágenes, videos, archivos) desde ubicaciones cercanas al usuario para mejorar la velocidad.
| Tipo | Ejemplos | Características |
|---|---|---|
| Relacional | MySQL, PostgreSQL | Basadas en tablas, SQL |
| No Relacional | MongoDB, Redis | JSON, clave-valor, documentos |
Es dividir una base de datos grande en partes más pequeñas llamadas "shards", distribuidas en distintos servidores para mejorar rendimiento y escalabilidad.
La caché almacena datos en memoria para evitar accesos repetidos a bases de datos. Mejora la latencia y reduce la carga del sistema.
Ejemplo: Redis, Memcached.
Postula que en un sistema distribuido solo se pueden garantizar dos de tres propiedades al mismo tiempo:
- Consistency (consistencia)
- Availability (disponibilidad)
- Partition Tolerance (tolerancia a partición)
Es un sistema que permite comunicación asíncrona entre servicios. Se usa para desacoplar componentes y manejar picos de tráfico.
Ejemplo: RabbitMQ, Kafka, AWS SQS.
- Latencia
- Throughput
- Tasa de errores
- Tiempo de respuesta promedio
- Uso de CPU/Memoria
- SLA/Uptime
- Endpoint para generar la URL corta.
- Base de datos para mapear
<shortCode>→<originalURL>. - Algoritmo de hash o generador incremental.
- Caché para accesos frecuentes.
- Escalabilidad: separación de lectura/escritura.
- WebSockets para comunicación bidireccional.
- Cola de mensajes para persistencia.
- Base de datos para historial.
- Escalabilidad horizontal del servidor de sockets.
- Clusters de servidores redundantes.
- Balanceadores de carga.
- Réplicas de bases de datos.
- Monitorización y alertas.
- Backup automático y recuperación ante desastres.
- System Design Primer (GitHub)
- Educative.io - Grokking the System Design Interview
- High Scalability Blog
- Awesome Scalability
🎥 Videos recomendados:
Hecho con 🧠 por @holasoymalva