Skip to content
SP StackPractices
advanced

Guía de Entrevistas de System Design — Conceptos Clave

Una guía práctica para entrevistas de system design: escalabilidad, bases de datos, caching, load balancing, microservicios y cómo estructurar tu respuesta.

Guía de Entrevistas de System Design

Introducción

Las entrevistas de system design evalúan tu capacidad para diseñar sistemas escalables, confiables y mantenibles. A diferencia de las entrevistas de código, no hay una única respuesta correcta. El objetivo es demostrar pensamiento estructurado, análisis de trade-offs y profundidad de conocimiento técnico.

Estructura de la Entrevista

Una respuesta fuerte sigue un framework de 4S:

1. Scope (2-3 minutos)

Clarifica los requerimientos antes de diseñar:

Requerimientos funcionales:

  • ¿Qué features debe soportar el sistema?
  • ¿Cuáles son los casos de uso principales?

Requerimientos no funcionales:

  • Escala: ¿Cuántos usuarios? ¿Requests por segundo?
  • Latencia: ¿Cuál es el tiempo de respuesta aceptable?
  • Disponibilidad: ¿Qué uptime se requiere (99.9%, 99.99%)?
  • Consistencia vs. disponibilidad: ¿Podemos tolerar consistencia eventual?

Ejemplo:

“Diseña un acortador de URLs como bit.ly.”

  • Funcional: Acortar URL, redireccionar, alias personalizados, analytics
  • Escala: 100M URLs nuevas/día, 10B lecturas/día
  • Latencia: <50ms para redirecciones
  • Disponibilidad: 99.99%

2. Sketch (10-15 minutos)

Dibuja un diseño de alto nivel con los componentes principales:

Cliente → Load Balancer → API Servers → Cache → Database

        Message Queue → Analytics Workers

Componentes clave a considerar:

  • Load Balancer: Distribuye tráfico (round-robin, least connections)
  • API Gateway: Autenticación, rate limiting, routing
  • Application Servers: Stateless, escalables horizontalmente
  • Cache: Redis, Memcached para datos hot
  • Database: Elección SQL vs. NoSQL
  • Message Queue: Kafka, RabbitMQ para procesamiento async
  • CDN: Assets estáticos y edge caching
  • Object Storage: S3 para archivos/imágenes

3. Scale (10-15 minutos)

Identifica cuellos de botella y propone soluciones:

Cuello de BotellaSolución
Tráfico read-heavyCache + CDN + read replicas
Tráfico write-heavySharding + message queues
Punto único de falloMulti-AZ, replicación, failover
Queries lentosÍndices, desnormalización, índices de búsqueda
Almacenamiento de archivos grandesObject storage (S3) + presigned URLs

Cálculos aproximados:

100M URLs/día = ~1,160 escrituras/segundo (peak ~3,000/s)
10B lecturas/día = ~115,000 lecturas/segundo (peak ~300,000/s)

Registro de URL: short_code (6 bytes) + long_url (500 bytes) + metadata (100 bytes)
≈ 600 bytes por URL

Almacenamiento diario: 100M × 600B = 60 GB/día
Almacenamiento anual: ~22 TB/año

4. Solidify (5 minutos)

Trata casos edge y preocupaciones operacionales:

  • Monitoreo: Latencia, tasa de error, throughput
  • Seguridad: Rate limiting, validación de inputs, protección DDoS
  • Retención de datos: Políticas de archivo, eliminación GDPR
  • Disaster recovery: Backups, point-in-time recovery

Conceptos Core

Escalado Horizontal vs. Vertical

VerticalHorizontal
EnfoqueMáquina más grandeMás máquinas
LímiteTope de hardwareCasi ilimitado
CostoCaro por unidadMás barato por unidad
DowntimeUsualmente requiereRolling, sin downtime
ComplejidadSimpleRequiere balanceo de carga, estado distribuido

Sharding de Base de Datos

Particiona datos entre múltiples bases de datos para distribuir carga:

Shard por user_id % 4:
  Usuario 1 → Shard 0
  Usuario 2 → Shard 1
  Usuario 3 → Shard 2
  Usuario 4 → Shard 3
  Usuario 5 → Shard 0

Criterios de selección de shard key:

  • Alta cardinalidad (muchos valores distintos)
  • Distribución uniforme (evita hotspots)
  • Localidad de queries (la mayoría de queries incluyen la shard key)

Estrategias de Caching

EstrategiaCómo FuncionaCaso de Uso
Cache-AsideLa app revisa cache, carga de DB en missRead-heavy, la app controla la lógica
Read-ThroughLa cache fetcha de DB transparentementeLógica de app más simple
Write-ThroughLas escrituras actualizan cache y DB simultáneamenteConsistencia fuerte
Write-BehindLas escrituras van a cache, flush async a DBWrite-heavy, tolera delay

Teorema CAP

En un sistema distribuido, solo puedes garantizar dos de tres:

  • Consistencia: Todos los nodos ven los mismos datos simultáneamente
  • Disponibilidad: Cada request recibe una respuesta
  • Tolerancia a Particiones: El sistema continúa operando a pesar de fallas de red

Implicación práctica: Las particiones de red son inevitables, así que eliges entre sistemas CP (consistentes) o AP (disponibles).

Problemas de Diseño Comunes

ProblemaDesafíos Clave
URL ShortenerColisiones de hash, alto volumen de lecturas, analytics
Twitter FeedFan-out (push vs. pull), generación de timeline
Sistema de ChatEntrega en tiempo real, presencia, orden de mensajes
Motor de BúsquedaIndexación, ranking, parsing de queries
Video StreamingCDN, bitrate adaptativo, encoding
Rate LimiterToken bucket vs. sliding window, estado distribuido

Buenas Prácticas

  • Empieza simple, luego agrega complejidad solo cuando esté justificada
  • Establece suposiciones explícitamente — los entrevistadores evalúan tu razonamiento
  • Discute trade-offs — cada decisión tiene pros y contras
  • Usa números concretos — la matemática aproximada muestra rigor
  • Conoce tu stack tecnológico — no propongas tecnologías que no puedas explicar
  • Practica con timer — 45 minutos pasan rápido

Errores Comunes

  • Saltar a un esquema de base de datos detallado antes de clarificar requerimientos
  • Ignorar requerimientos no funcionales (escala, disponibilidad)
  • Proponer tecnologías sin entenderlas (ej. “usa Kafka” sin saber por qué)
  • No discutir trade-offs (ej. SQL vs. NoSQL)
  • Olvidar monitoreo, seguridad y preocupaciones operacionales
  • Diseñar para escala infinita cuando los requerimientos no la justifican

Preguntas Frecuentes

P: ¿Qué tan profundo debo ir en una tecnología? R: Lo suficientemente profundo para explicar por qué la elegiste y sus limitaciones. Si mencionas Redis, estate listo para explicar políticas de evicción y opciones de persistencia.

P: ¿Debería mencionar proveedores de cloud específicos? R: Usa términos genéricos (“object storage” en lugar de “S3”) a menos que el entrevistador pida específicos. Esto muestra pensamiento arquitectónico independiente de vendors.

P: ¿Qué pasa si no conozco una tecnología que el entrevistador pregunta? R: Sé honesto. Di “No estoy familiarizado con X, pero lo abordaría…” y describe el espacio del problema y cómo evaluarías soluciones.