TechLead
Leccion 24 de 30
5 min de lectura
Diseño de Sistemas

Estimación Rápida (Back-of-the-Envelope)

Domina las estimaciones rápidas para entrevistas de diseño de sistemas con números de latencia, cálculos de rendimiento y técnicas de estimación de almacenamiento.

Estimación Rápida (Back-of-the-Envelope)

La estimación rápida es una habilidad crítica para entrevistas de diseño de sistemas y decisiones de arquitectura del mundo real. Permite a los ingenieros determinar rápidamente si un diseño es factible, identificar cuellos de botella y tomar decisiones tecnológicas informadas sin construir prototipos. El objetivo no es precisión exacta sino razonamiento correcto del orden de magnitud.

Por Qué Importan las Estimaciones

  • Determina si se necesita un solo servidor o un sistema distribuido
  • Identifica qué componentes necesitan escalado horizontal
  • Ayuda a elegir entre diferentes tecnologías de almacenamiento
  • Valida o invalida decisiones arquitectónicas antes de implementar
  • Demuestra pensamiento estructurado en entrevistas

Números Comunes que Todo Ingeniero Debe Conocer

Estos son valores aproximados que sirven como bloques de construcción para estimaciones. Memoriza los órdenes de magnitud, no los números exactos.

Números de Latencia

Operación Latencia Notas
Referencia caché L1 ~1 ns Caché en CPU
Referencia caché L2 ~4 ns Caché en CPU
Referencia memoria principal (RAM) ~100 ns Acceso DRAM
Lectura aleatoria SSD ~150 us 1000x más lento que RAM
Lectura aleatoria HDD ~10 ms Tiempo de búsqueda mecánica
Ida y vuelta mismo datacenter ~0.5 ms Red dentro del DC
Ida y vuelta intercontinental ~150 ms Límite de velocidad de la luz
Redis GET ~0.5 ms En memoria + red
Consulta simple PostgreSQL ~2-5 ms Consulta indexada
Llamada API externa ~50-200 ms Servicio de terceros

Números de Rendimiento

Sistema Rendimiento Notas
Servidor web individual (Node.js) ~10,000 RPS Endpoints API simples
PostgreSQL ~10,000 consultas/s Consultas indexadas simples
Redis ~100,000 ops/s Instancia individual
Kafka (partición individual) ~10,000 msg/s Rendimiento por partición
Kafka (clúster) ~1,000,000 msg/s Con muchas particiones

Números de Almacenamiento y Tamaño de Datos

Dato Tamaño
Carácter ASCII1 byte
Carácter UTF-8 (promedio)2 bytes
UUID16 bytes
Tweet típico / mensaje corto~250 bytes
Respuesta JSON API típica~2 KB
Foto comprimida~200 KB
1 minuto de audio MP3~1 MB
1 minuto de video HD~50 MB

Referencia Rápida de Potencias de 2

Potencia Valor Exacto Aproximado
2^101,024~1 mil (1 KB)
2^201,048,576~1 millón (1 MB)
2^301,073,741,824~1 mil millones (1 GB)
2^401,099,511,627,776~1 billón (1 TB)

Marco de Estimación

Sigue este enfoque sistemático para cualquier problema de estimación:

// Estimation framework as code
interface EstimationProblem {
  question: string;
  assumptions: Record<string, number>;
  calculate(): EstimationResult;
}

// Example: Estimate Twitter's storage needs for tweets
class TwitterStorageEstimation implements EstimationProblem {
  question = "How much storage does Twitter need for tweets per day?";

  assumptions = {
    dailyActiveUsers: 300_000_000,       // 300M DAU
    tweetsPerUserPerDay: 0.5,
    avgTweetSizeBytes: 250,
    metadataPerTweetBytes: 200,
    mediaAttachmentRate: 0.2,            // 20% of tweets have media
    avgMediaSizeBytes: 200_000,          // 200KB per image
  };

  calculate() {
    const a = this.assumptions;

    const totalTweetsPerDay = a.dailyActiveUsers * a.tweetsPerUserPerDay;
    // = 300M * 0.5 = 150M tweets/day

    const textStoragePerDay = totalTweetsPerDay * (a.avgTweetSizeBytes + a.metadataPerTweetBytes);
    // = 150M * 450 bytes = 67.5 GB/day

    const mediaStoragePerDay = totalTweetsPerDay * a.mediaAttachmentRate * a.avgMediaSizeBytes;
    // = 150M * 0.2 * 200KB = 6 TB/day

    const totalPerDay = textStoragePerDay + mediaStoragePerDay;
    // = ~6 TB/day (media dominates)

    const totalPerYear = totalPerDay * 365;
    // = ~2.2 PB/year

    return {
      tweetsPerDay: "150 million",
      textStoragePerDay: "~67.5 GB",
      mediaStoragePerDay: "~6 TB",
      totalPerDay: "~6 TB",
      totalPerYear: "~2.2 PB",
      conclusion: "Media storage dominates. Need distributed object storage like S3.",
    };
  }
}

Ejemplos Prácticos con Soluciones

Ejemplo 1: QPS para un Acortador de URLs

Pregunta: Estima el QPS para un acortador de URLs con 100 millones de URLs creadas por mes.

  • 100M URLs/mes = 100M / (30 * 24 * 3600) = ~40 URLs/segundo (escrituras)
  • El ratio lectura:escritura para acortadores de URLs es típicamente 100:1
  • QPS de lectura = 40 * 100 = ~4,000 lecturas/segundo
  • Pico = 2-3x el promedio = ~10,000 lecturas/segundo
  • Conclusión: Una sola instancia de PostgreSQL puede manejar esto. Agregar caché Redis para URLs populares.

Ejemplo 2: Ancho de Banda para un Servicio de Streaming de Video

Pregunta: Estima el ancho de banda necesario para un servicio que transmite a 10 millones de usuarios concurrentes.

  • Bitrate promedio de video: 5 Mbps (1080p)
  • 10M usuarios concurrentes * 5 Mbps = 50 Tbps
  • Esto es masivo; un solo centro de datos no puede servir esto
  • Conclusión: Se debe usar un CDN global con caché en el borde. La mayor parte del tráfico se sirve desde PoPs del CDN, no desde servidores origen.

Ejemplo 3: Tamaño de Base de Datos para una Plataforma de Redes Sociales

Pregunta: Estima el tamaño de base de datos para almacenar perfiles de usuario de 1 mil millones de usuarios.

  • Datos de perfil: nombre (50B), email (50B), bio (200B), configuración (100B), metadatos (100B) = ~500 bytes
  • 1B usuarios * 500 bytes = 500 GB
  • Con índices (2x de overhead): ~1 TB
  • Conclusión: Cabe en un solo servidor de base de datos grande para almacenamiento, pero la carga de consultas requerirá sharding o réplicas de lectura.

Conversiones de Tiempo Útiles

Período Segundos Aproximación Rápida
1 día86,400~100,000 (10^5)
1 mes2,592,000~2.5 millones (2.5 * 10^6)
1 año31,536,000~30 millones (3 * 10^7)

Consejos para Entrevistas de Diseño de Sistemas

  • Declara tus suposiciones claramente. Los entrevistadores se preocupan más por tu proceso de razonamiento que por números exactos
  • Redondea agresivamente. Usa potencias de 10 y multiplicadores simples. 86,400 segundos/día se convierte en 100,000
  • Muestra tu trabajo. Escribe cada paso para que el entrevistador pueda seguir tu lógica
  • Verifica tu respuesta. Si calculas que un solo laptop puede manejar todo el tráfico de Google, algo está mal
  • Enfócate en los cuellos de botella. Usa las estimaciones para identificar qué componente necesita más atención

Continuar Aprendiendo