Las 30 preguntas y respuestas más frecuentes en entrevistas de diseño de sistemas (2026)

Preguntas y respuestas de la entrevista de diseño del sistema

Prepararse para una entrevista de diseño de sistemas significa anticipar cómo los entrevistadores evalúan el pensamiento arquitectónico bajo presión. Preguntas de la entrevista de diseño del sistema Revelar profundidad, compensaciones, juicio de escalabilidad y comunicación a través de discusiones estructuradas.

Una sólida preparación abre puertas a puestos en plataformas en la nube, sistemas distribuidos e ingeniería de datos, demostrando su experiencia técnica mediante análisis reales. Los profesionales que trabajan en este campo desarrollan habilidades prácticas, apoyan a los equipos, ayudan a los gerentes a tomar decisiones y resuelven preguntas y respuestas comunes, desde principiantes hasta niveles sénior, incluyendo perspectivas avanzadas, básicas y técnicas, a nivel global.
Leer más ...

👉 Descarga gratuita en PDF: Preguntas y respuestas de la entrevista de diseño de sistemas

Principales preguntas y respuestas de la entrevista de diseño del sistema

1) Explique qué es el diseño de sistemas y por qué es importante en la ingeniería de software.

El diseño del sistema es el proceso de definir la arquitectura, los componentes, las interfaces y los datos de un sistema Para satisfacer requisitos específicos de forma escalable, fiable y mantenible. Conecta los objetivos generales (lo que el sistema debe lograr) con decisiones concretas sobre tecnología, protocolos y patrones de arquitectura. Un diseño de sistema sólido garantiza que una aplicación funcione bien bajo carga, sea tolerante a fallos y pueda evolucionar con el tiempo sin necesidad de reescrituras completas.

En las entrevistas, esto demuestra su capacidad para mantener el equilibrio. requerimientos funcionales con restricciones no funcionales Como la escalabilidad, la latencia, la consistencia y la disponibilidad. Todas las grandes empresas tecnológicas evalúan las habilidades de diseño de sistemas de un candidato para evaluar su criterio de ingeniería en situaciones reales.


2) ¿Cómo se distingue el diseño de alto nivel (HLD) del diseño de bajo nivel (LLD) en la arquitectura del sistema?

El diseño de alto nivel (HLD) se centra en Descripción general de la arquitectura y componentes principales Sin profundizar en los detalles de implementación, muestra cómo interactúan los sistemas, por ejemplo, servidor web, base de datos de CRISPR Medicine News, cache, API Gateway y sistemas de mensajería.

El diseño de bajo nivel (LLD) profundiza en definiciones de clases, métodos, estructuras de datos y lógica detallada Dentro de cada componente. El DAN se centra en los componentes que utilizará y cómo interactúan; el DAL se centra en cómo implementará dichas interacciones. Comprender ambos aspectos ayuda a los entrevistadores a evaluar su visión global, así como sus capacidades de ingeniería de detalle.


3) ¿Cuáles son las métricas de rendimiento clave que debe tener en cuenta al diseñar un sistema y por qué?

Las métricas de rendimiento ayudan a cuantificar la eficacia con la que un sistema satisface las necesidades del usuario y del negocio. Las métricas clave son:

  • Estado latente: Tiempo que se tarda en procesar una sola solicitud. Una menor latencia implica respuestas más rápidas.
  • rendimiento: Cantidad de trabajo procesado en un período (p. ej., solicitudes por segundo). Un mayor rendimiento implica eficiencia bajo carga.
  • Disponibilidad: Proporción de tiempo que un sistema está operativo. La alta disponibilidad es crucial para los servicios globales.

Estas métricas ayudan a los diseñadores a equilibrar las compensaciones. Por ejemplo, el almacenamiento en caché reduce la latencia, pero dificulta la consistencia de los datos. Demostrar familiaridad con estas métricas demuestra que te preocupas por la calidad del sistema en el mundo real.

Métrico Definición Importancia
Estado latente Tiempo por solicitud La experiencia del usuario
Throughput Solicitudes por unidad de tiempo Global
Disponibilidad Tiempo de actividad vs. tiempo de inactividad Confiabilidad

4) Describe el equilibrio de carga y por qué es fundamental en los sistemas distribuidos.

El equilibrio de carga es el proceso de Distribuir solicitudes entrantes entre múltiples servidores o servicios Para evitar que un solo nodo se convierta en un cuello de botella, se garantiza el uso óptimo de la capacidad, se mejoran los tiempos de respuesta y se aumenta la confiabilidad del sistema al desviar el tráfico de las instancias con problemas.

Existen diferentes tipos de balanceadores de carga. A Capa 4 (L4) El balanceador trabaja en la capa de transporte (IP/puerto), mientras que un Capa 7 (L7) Balancer opera en la capa de aplicación y comprende la semántica HTTP/S. El balanceo de carga es fundamental para la tolerancia a fallos, el escalado sin tiempos de inactividad y las actualizaciones continuas en los sistemas de producción. Una respuesta correcta demuestra que comprende las compensaciones fundamentales de los sistemas distribuidos entre rendimiento, consistencia y coste.


5) ¿Cómo diseñarías un servicio TinyURL? Describe los componentes y pasos principales.

El diseño de un servicio TinyURL abarca tanto requisitos funcionales (acortamiento de URL, redirección de usuarios) como requisitos no funcionales (escalabilidad, singularidad, rendimiento).

En primer lugar, las preguntas aclaratorias ayudan a definir las restricciones: volumen esperado, políticas de vencimiento, necesidades de análisis, etc. Los componentes principales son:

  • Capa API: Recibe y procesa solicitudes de acortamiento/redireccionamiento.
  • Base de datos y almacenamiento en caché: Almacena asignaciones de URL originales ↔ acortadas; el almacenamiento en caché mejora el rendimiento de lectura.
  • Generador de ID cortos: Utiliza identificadores únicos codificados en base o mediante hash.

Para generar claves únicas de manera eficiente, puedes:

  • Usa codificación base-62 de un ID secuencial (por ejemplo, 1 → a, 2 → b, etc.).
  • Usar un función hash con resolución de colisiones.

También debe considerar el análisis, los límites de velocidad y la gestión de URLs activas con capas de caché o CDN para reducir la carga. Describir estas ventajas y desventajas muestra una comprensión profunda de los patrones de diseño y las consideraciones de escalabilidad.


6) ¿Qué es el almacenamiento en caché y cómo mejora el rendimiento del sistema?

Almacenamiento en caché de tiendas datos a los que se accede con frecuencia o que son costosos de procesar En un medio de almacenamiento más rápido (memoria, caché distribuida) para reducir la carga de la base de datos y el procesamiento repetido. Mejora significativamente la latencia y el rendimiento al atender rápidamente las solicitudes más frecuentes.

El almacenamiento en caché puede ocurrir en múltiples capas: memoria de la aplicación, Redis/Ehcache, servidores perimetrales de CDN o almacenamiento local del navegador. Si bien el almacenamiento en caché reduce los tiempos de respuesta, presenta problemas de obsolescencia e invalidación, que deben abordarse durante el diseño. Por ejemplo, puede usar políticas de tiempo de vida (TTL) o estrategias de invalidación de caché cuando cambian los datos subyacentes. Las buenas respuestas demuestran que comprende ambos... beneficios y desventajas de almacenamiento en caché.


7) Explique el Teorema CAP y sus implicaciones en el diseño de sistemas distribuidos.

El teorema CAP establece que en un sistema distribuido se pueden elegir como máximo dos de las tres garantías siguientes:

  1. Consistencia: Todos los nodos ven los mismos datos al mismo tiempo.
  2. Disponibilidad: Cada solicitud recibe una respuesta (sin garantía de corrección).
  3. Tolerancia de partición: El sistema continúa funcionando a pesar de los fallos en la red.

Ningún sistema distribuido práctico puede lograr las tres simultáneamente en presencia de particiones de red. Por ejemplo, durante una partición, los sistemas deben elegir entre servir datos obsoletos (disponibilidad) o rechazar solicitudes hasta que se restablezca la consistencia (consistencia). Comprender el CAP demuestra que se pueden tomar decisiones informadas basadas en las prioridades operativas, una habilidad clave en las entrevistas de diseño de sistemas.


8) ¿Cómo diseñarías un servicio de mensajería de chat como WhatsApp en términos de alto nivel?

Para diseñar un sistema de chat a escala, comience por identificar los requisitos clave: entrega de mensajes en tiempo real, persistencia, ordenamiento de mensajes, soporte fuera de línea y escalabilidad.

A un nivel alto:

  • Clientes Conectarse a través de la web/móvil a los servidores de enlace.
  • Enrutadores de mensajes manejar mensajes entrantes y enviarlos a los destinatarios (a través de conexiones persistentes como WebSockets).
  • Bases de datos Almacenar el historial de mensajes, con particionamiento apropiado para grandes bases de usuarios.

Los componentes adicionales incluyen cachés para chats recientes, colas para entrega asincrónica y servicios de notificación para usuarios sin conexión. Deberías discutir Cómo se conservan, ordenan y envían los mensajes a múltiples dispositivos por usuario y cómo manejar la conmutación por error y la tolerancia a fallos.


9) ¿Qué es la fragmentación y cómo ayuda a escalar bases de datos?

La fragmentación es una forma de escala horizontal Donde un gran conjunto de datos se divide en particiones independientes más pequeñas, denominadas fragmentos, cada una almacenada en un nodo de base de datos diferente. Esto mejora el rendimiento y la escalabilidad al distribuir los datos y la carga de consultas entre varias máquinas en lugar de escalar una sola instancia.

Los datos se pueden fragmentar por ID de cliente, región geográfica o hash. Si bien la fragmentación reduce la carga por nodo, introduce complejidad en las consultas entre fragmentos y en el reequilibrio al añadir o eliminar nodos. Los entrevistadores esperan que comprenda estas ventajas y desventajas y cómo el hash consistente o los administradores de fragmentos pueden facilitar las operaciones.


10) Describe cómo las API y los microservicios se diferencian de una arquitectura monolítica.

A Monolithic architecture Agrupa todos los componentes de la aplicación en una única unidad implementable. Esto puede simplificar el desarrollo inicialmente, pero dificulta su escalabilidad, mantenimiento y actualización con el tiempo.

Microservices romper el sistema en Servicios pequeños que se pueden implementar de forma independiente, cada uno responsable de una capacidad empresarial específica. Las API (interfaces de programación de aplicaciones) permiten la comunicación entre estos servicios.

Aspecto Monolítico Microservicios
Despliegue Unidad singular Servicios independientes
Global Limitada Escalado por servicio
Aislamiento de fallos Pobre Fuerte
Complejidad: Más simple inicialmente Operaciones más complejas

Los microservicios mejoran la escalabilidad y la flexibilidad de implementación, pero requieren herramientas operativas avanzadas (descubrimiento de servicios, rastreo y tolerancia a fallos). Analizar esto demuestra que se puede razonar sobre la evolución de la arquitectura y las compensaciones entre simplicidad y flexibilidad.


11) ¿Cómo funciona una red de distribución de contenidos (CDN) y cuáles son sus ventajas?

A Red de distribución de contenido (CDN) Es una red distribuida de servidores proxy ubicados estratégicamente en diversas regiones geográficas. Su objetivo principal es... Entregar contenido a los usuarios con una latencia mínima sirviéndolo desde el servidor más cercano (conocido como nodo de borde).

Cuando un usuario solicita un recurso web (por ejemplo, una imagen, un vídeo o un archivo estático), la CDN almacena el contenido en caché y lo entrega directamente desde un servidor perimetral. Si el contenido no está en la caché, lo recupera del servidor de origen y lo almacena para solicitudes posteriores.

Ventajas de las CDN:

Factor La Ventaja
Estado latente Reduce el tiempo de respuesta al ofrecer el contenido más cerca de los usuarios
Ancho de banda Descarga el uso del ancho de banda de los servidores de origen
Confiabilidad Proporciona tolerancia a fallos con nodos distribuidos
Global Maneja altos volúmenes de tráfico de manera eficiente

Las CDN son vitales para sistemas globales como Netflix, YouTube, o plataformas de comercio electrónico, garantizando alto rendimiento y disponibilidad.


12) ¿Qué es la limitación de velocidad y por qué es esencial en el diseño de API?

Límite de velocidad restringe la cantidad de solicitudes que un cliente puede realizar a una API dentro de un período específico. Es crucial para Prevenir el abuso, mantener un uso justo y protegiendo los servicios backend de ataques de sobrecarga o de denegación de servicio (DoS).

Los algoritmos comunes para limitar la velocidad incluyen:

  • Contador de ventana fija —Simple pero puede causar picos en los límites de las ventanas.
  • Ventana corrediza / Tronco corredizo — Proporciona un manejo más fluido de las solicitudes.
  • Cubo de fichas / Cubo con fugas — Permite ráfagas dentro de límites y mantiene un flujo de solicitudes constante.

Por ejemplo, GitHub limita las llamadas a la API a 5000 por hora por usuario. Implementar límites de frecuencia garantiza la estabilidad del sistema y mejora la calidad general del servicio.


13) ¿Cómo se garantiza la coherencia de los datos en sistemas distribuidos?

Mantener la consistencia en sistemas distribuidos es un desafío debido a la replicación y la latencia de la red. Existen varias estrategias según el equilibrio entre consistencia y disponibilidad requerido:

Tipo de consistencia Descripción Caso de uso
Consistencia fuerte Todos los clientes ven los mismos datos al instante Sistemas bancarios
Coherencia eventual Las actualizaciones se propagan de forma asincrónica; se permiten diferencias temporales Feeds de redes sociales
Consistencia causal Mantiene el orden causa-efecto Aplicaciones colaborativas

Técnicas como registros de escritura anticipada, relojes vectoriales, algoritmos de consenso (Raft, Paxos) y compromiso de dos fases (2PC) Ayuda a mantener la sincronización. Los entrevistadores esperan que expliques when para relajar la consistencia para obtener ganancias de rendimiento y escalabilidad.


14) Explique la diferencia entre escala horizontal y vertical.

El escalamiento se refiere a aumentar la capacidad de un sistema para gestionar más carga. Existen dos tipos principales:

Tipo de escala Método Ventajas Desventajas
Escalamiento vertical (Scale-Up) Agregar más recursos (CPU, RAM) a una sola máquina Más sencillo de implementar Límites de hardware, punto único de falla
Escalamiento horizontal (escalamiento horizontal) Añadir más máquinas para distribuir la carga Alta disponibilidad, rentable Complejo de gestionar y coordinar

Por ejemplo, escalar un servidor web de 2 a 8 CPU se considera escalado vertical, mientras que agregar varios servidores detrás de un balanceador de carga se considera escalado horizontal. Los sistemas distribuidos modernos como Kubernetes favorecen... escala horizontal para elasticidad.


15) ¿Qué son las colas de mensajes y por qué se utilizan en arquitecturas distribuidas?

A cola de mensajes desvincula a productores y consumidores almacenando mensajes temporalmente hasta que se procesan. Esto permite comunicación asíncrona, mejorando la resiliencia y la escalabilidad en sistemas distribuidos.

Los intermediarios de mensajes más populares incluyen RabbitMQ, Kafka, Amazon SQS y Google Pub/Sub.

Beneficios:

  • Suaviza los picos de tráfico
  • Servicios de desacoplamiento
  • Habilita mecanismos de reintento y persistencia.
  • Mejora la tolerancia a fallos

Ejemplo: En una plataforma de comercio electrónico, un servicio de pedidos puede publicar un mensaje (“Pedido realizado”) que los servicios de inventario y facturación consumen independientemente, evitando dependencias directas.


16) ¿Cómo diseñarías un sistema de almacenamiento de archivos escalable como Google Drive or Dropbox?

Para diseñar un sistema de almacenamiento de archivos basado en la nube, divídalo en componentes clave:

  • Servicio de interfaz: Maneja la carga/descarga de archivos a través de API REST.
  • Servicio de metadatos: Almacena la propiedad de los archivos, los permisos de acceso y el historial de versiones.
  • Servicio de almacenamiento: Administra fragmentos de archivos en el almacenamiento distribuido (por ejemplo, S3, HDFS).
  • Fragmentación: Los archivos se dividen en fragmentos más pequeños (por ejemplo, 4 MB) para un almacenamiento y transmisión eficientes.

Los desafíos incluyen garantizar deduplicación de datos, consistencia y sincronización de cambios En todos los dispositivos. La implementación de sincronización a nivel de bloque y hash de contenido garantiza la eficiencia e integridad del ancho de banda.


17) ¿Cuáles son los factores clave a tener en cuenta al diseñar un esquema de base de datos escalable?

Un esquema escalable equilibra el rendimiento, la flexibilidad y la facilidad de mantenimiento. Consideraciones importantes:

  • Particionamiento de datos (fragmentación) para gestionar el crecimiento.
  • Normalización versus desnormalización: Normalizar para integridad; desnormalizar para rendimiento de lectura intensiva.
  • Estrategia de indexación para búsquedas rápidas.
  • Almacenamiento en caché y replicación Para manejar alto tráfico.

Ejemplo: En una aplicación de redes sociales, los datos de usuario y las publicaciones se pueden almacenar por separado para reducir la duplicación y mejorar el rendimiento de las consultas. Las decisiones de diseño del esquema deben alinearse con patrones de acceso y frecuencia de consulta.


18) ¿Cuáles son las ventajas y desventajas de utilizar la arquitectura de microservicios?

Los microservicios se han convertido en la columna vertebral de las aplicaciones de nube modernas, pero tienen sus desventajas.

Ventajas Desventajas
Implementación y escalado independientes Mayor complejidad operativa
Aislamiento de fallas y resiliencia La depuración distribuida es más difícil
Adopción de tecnología más fácil Requiere una fuerte cultura DevOps
Mejor mantenibilidad del código Mayor latencia debido a los saltos de red

Los microservicios son ideales para sistemas grandes y en evolución, pero requieren una monitorización sólida, puertas de enlace API y estrategias de comunicación entre servicios.


19) ¿Cómo manejarías la replicación de bases de datos en un sistema a gran escala?

Replicación de base de datos Implica copiar datos de una base de datos principal a una o más réplicas para mejorar la disponibilidad y el rendimiento de lectura. Existen dos tipos principales:

Tipo de replicación Descripción Caso de uso
Synchonrado Los cambios se escriben en las réplicas inmediatamente consistencia fuerte
Asincrónico El primario confirma la escritura antes de actualizar las réplicas Mejor rendimiento

La replicación mejora Tolerancia a falloshabilita distribución geográfica, y apoya escala de lectura (réplicas de lectura). Sin embargo, presenta desafíos como el retraso en la replicación y la resolución de conflictos. Herramientas como MySQL Replicación de grupo, MongoDB Conjuntos de réplicas y PostgreSQL replicación de streaming son soluciones estándar.


20) ¿Qué es la arquitectura basada en eventos y dónde es más útil?

La arquitectura basada en eventos (EDA) es un paradigma de diseño donde los componentes se comunican a través de eventos — mensajes que indican cambios de estado o acciones. En lugar de solicitudes directas, los servicios publican y se suscriben a eventos de forma asincrónica.

Este diseño es ideal para sistemas débilmente acoplados, como plataformas de IoT, comercio electrónico y sistemas de análisis en tiempo real.

Beneficios:

  • Alta escalabilidad
  • Componentes desacoplados
  • Capacidad de respuesta en tiempo real

Ejemplo: En la arquitectura de Uber, cuando se reserva un viaje, un evento activa actualizaciones en los sistemas de precios, coincidencia de conductores y notificación simultáneamente, todo sin un acoplamiento estrecho.


21) ¿Qué es la idempotencia en el diseño de sistemas y por qué es importante?

Idempotencia significa que realizar la misma operación varias veces tiene el El mismo efecto que realizarlo una vezGarantiza la confiabilidad en sistemas distribuidos donde las solicitudes pueden reintentarse debido a fallas o retrasos en la red.

Por ejemplo:

  • y BORRAR Las solicitudes son naturalmente idempotentes (repetirlas no cambia el estado).
  • PUBLICAR Las solicitudes (como la creación de una transacción) no son idempotentes a menos que estén diseñadas específicamente para serlo.

Para implementar la idempotencia:

  • Usa identificadores de solicitud únicos para rastrear envíos duplicados.
  • Mantener un registro de transacciones para ignorar operaciones repetidas.

Este principio es fundamental en pasarelas de pago, procesamiento de pedidos y sistemas de correo electrónico donde las acciones duplicadas pueden causar graves inconsistencias.


22) Explique el concepto de consistencia eventual con un ejemplo.

Consistencia eventual es un modelo en bases de datos distribuidas donde las actualizaciones no son inmediatamente visibles para todos los nodos, pero El sistema converge a un estado consistente a lo largo del tiempo.

Ejemplo:

In Amazon, DynamoDBCuando se actualiza un elemento en una región, las réplicas en otras regiones pueden tener temporalmente datos antiguos. Sin embargo, se sincronizarán eventualmente mediante la replicación en segundo plano.

Este modelo es útil para priorizar sistemas. disponibilidad más del consistencia estricta, tales como:

  • Cronologías de las redes sociales
  • Sistemas de almacenamiento en caché
  • Registros DNS

La compensación clave radica entre tolerancia al estancamiento y velocidad de respuesta.


23) ¿Cómo diseñarías un sistema de notificación que admita múltiples canales (correo electrónico, SMS, push)?

El diseño de un sistema de notificación escalable requiere modularidad y flexibilidad.

Architectura:

  1. API de notificaciones – Recibe solicitudes de notificación de las aplicaciones.
  2. Bus de colas/mensajes – Almacena y distribuye eventos (Kafka, SQS).
  3. Servicios para trabajadores – Procesadores específicos de canal (Email, SMS, Push).
  4. Proveedores de entrega – Integración con API externas como Twilio o Firebase.
  5. Base de datos de preferencias de usuario – Almacena configuraciones de inclusión/exclusión y preferencias de frecuencia.

Consideraciones clave:

  • Reintente entregas fallidas con estrategias de interrupción.
  • Utilice plantillas para mantener la coherencia.
  • Priorización de soporte (mensajes urgentes vs. de baja prioridad).

Este diseño modular garantiza confiabilidad y extensibilidad a medida que surgen nuevos canales de notificación.


24) ¿Qué es la indexación de bases de datos y cómo afecta al rendimiento?

A índice de base de datos es una estructura de datos (comúnmente un árbol B o una tabla hash) que mejora la velocidad de consulta al reducir la cantidad de registros que escanea la base de datos.

Por ejemplo, indexar la columna de correo electrónico en una tabla de usuarios permite que el motor de base de datos encuentre usuarios por correo electrónico rápidamente sin escanear toda la tabla.

Aspecto Con índice Sin índice
Velocidad de consulta Búsquedas rápidas Escaneos secuenciales lentos
Velocidad de escritura Más lento (se necesitan actualizaciones de índice) Escrituras más rápidas
Almacenaje Más espacio en disco Less STORAGE

Los índices mejoran el rendimiento de lectura, pero deben usarse con cuidado, ya que pueden ralentizar la lectura. escritura intensiva sistemas debido a los gastos generales de mantenimiento.


25) ¿Cómo garantizaría la tolerancia a fallos en un sistema distribuido a gran escala?

Tolerancia a fallos Significa que un sistema continúa funcionando incluso cuando fallan los componentes. Esto se logra mediante redundancia, monitoreo y recuperación automática.

Las estrategias incluyen:

  • Replicación: Datos o servicios duplicados en distintas regiones.
  • Mecanismos de conmutación por error: Redirigir automáticamente las solicitudes a nodos saludables.
  • Comprobaciones de estado y equilibradores de carga: Detectar y aislar instancias defectuosas.
  • Rompedores de circuito: Evitar fallos en cascada entre servicios dependientes.

Ejemplo: Netflix“Chaos Monkey” apaga intencionalmente instancias en producción para probar la resiliencia: una aplicación avanzada de los principios de tolerancia a fallas.


26) ¿Cuál es la diferencia entre la comunicación sincrónica y asincrónica en sistemas distribuidos?

Característica SyncComunicación crónica Comunicación asíncrona
Dependencia El remitente espera una respuesta El remitente procede de forma independiente
Ejemplos Llamadas a la API REST HTTP Colas de mensajes, Kafka
Estado latente Superior (bloqueo) Menor latencia percibida
Confiabilidad Bajar bajo fallas Superior (los mensajes pueden persistir)

SyncLos sistemas asíncronos son más simples pero están estrechamente acoplados, mientras que los sistemas asincrónicos mejoran la escalabilidad y el aislamiento de fallas.

Por ejemplo, el procesamiento de pedidos en un sistema de comercio electrónico puede ser asincrónico, pero la confirmación del pago debe permanecer sincrónica para garantizar una respuesta inmediata del usuario.


27) ¿Cómo diseñarías un limitador de velocidad para un sistema API distribuido?

Un limitador de velocidad distribuido garantiza un uso justo de la API en múltiples servidores.

Enfoques:

  1. Algoritmo de depósito de tokens – Cada usuario recibe tokens que se reponen con el tiempo.
  2. Algoritmo del cubo con fugas – Las solicitudes se procesan a un ritmo constante.
  3. Contador centralizado (por ejemplo, Redis) – Mantiene los recuentos de solicitudes por usuario.

Ejemplo de implementación:

  • Utilice contadores atómicos Redis con TTL.
  • Realizar un seguimiento de las marcas de tiempo de las solicitudes por clave de usuario.
  • Rechazar solicitudes que superen los umbrales.

La limitación de velocidad evita abuso, Ataques DoS y picos de costos inesperados, garantizando una calidad de servicio consistente para todos los clientes.


28) ¿Qué es un algoritmo de consenso distribuido y por qué es necesario?

Los algoritmos de consenso distribuido garantizan que varios nodos de un sistema acordar un único valor de datos, incluso cuando ocurren fallos.

Algoritmos comunes:

  • Paxos
  • Raft
  • Diente (usado en ZooKeeper)

Son esenciales para el mantenimiento elección de líder, replicación de estado y consistencia de los datos en bases de datos distribuidas y administradores de clústeres como Kubernetes.

Ejemplo: Raft garantiza que todos los nodos estén de acuerdo con las entradas de registro antes de aplicarlas a las máquinas de estado, lo que garantiza la confiabilidad incluso si los nodos fallan.


29) ¿Cómo diseñarías un sistema de registro y monitorización para microservicios?

La monitorización de sistemas distribuidos requiere una capacidad de observación centralizada para detectar y resolver problemas.

Componentes principales:

  • Inicio sesión: Recopile registros de todos los servicios utilizando herramientas como Fluentd or Logstash.
  • Métrica: Utilice Prometheus o Datadog para realizar un seguimiento de los indicadores de rendimiento (CPU, memoria, latencia de solicitud).
  • Rastreo: Implemente el seguimiento distribuido (Jaeger, Zipkin) para rastrear las rutas de solicitud en los servicios.
  • Alertando: Establezca umbrales para activar alertas en PagerDuty o Slack.

Mejora la práctica:

Usa identificadores de correlación para rastrear una única solicitud de usuario a través de múltiples microservicios, lo cual es crucial para depurar problemas de producción.


30) ¿Cuáles son las consideraciones de diseño clave para construir un sistema de alta disponibilidad (HA)?

A Alta disponibilidad (HA) El sistema minimiza el tiempo de inactividad y garantiza un servicio continuo.

Factores clave de diseño:

  1. Redundancia: Utilice varios servidores por componente.
  2. Eliminar puntos únicos de falla (SPOF).
  3. Conmutación automática por error: Redirigir el tráfico durante las interrupciones.
  4. Replicación de datos: Garantizar la durabilidad de los datos en todas las zonas.
  5. Vigilancia de la salud: Detecta y reemplaza automáticamente los nodos no saludables.
  6. Recuperación ante desastres (DR): Implementar copias de seguridad y georeplicación.

Ejemplo: AWS implementa servicios en zonas de disponibilidad (AZ) y utiliza balanceadores de carga elásticos para conmutación por error automática, lo que garantiza acuerdos de nivel de servicio (SLA) con un tiempo de actividad del 99.99 %.


🔍 Preguntas principales de entrevistas de diseño de sistemas con escenarios del mundo real y respuestas estratégicas

1) ¿Cómo abordar el diseño de un sistema distribuido a gran escala desde cero?

Se espera del candidato: El entrevistador quiere comprender su pensamiento estructurado, su capacidad para aclarar requisitos y cómo divide problemas complejos en componentes manejables.

Respuesta de ejemplo: Empiezo por aclarar los requisitos funcionales y no funcionales, como la escalabilidad, la disponibilidad y la latencia. A continuación, defino una arquitectura de alto nivel, identifico los componentes principales, defino el flujo de datos y selecciono las tecnologías adecuadas. Después, considero los cuellos de botella, los escenarios de fallo y las compensaciones antes de perfeccionar el diseño.


2) ¿Puedes explicar la diferencia entre escala horizontal y vertical, y cuándo utilizarías cada una?

Se espera del candidato: El entrevistador está probando sus conocimientos básicos sobre escalabilidad y su capacidad para aplicar la estrategia correcta en sistemas del mundo real.

Respuesta de ejemplo: El escalado vertical implica añadir más recursos a una sola máquina, mientras que el horizontal añade más máquinas para gestionar la carga. El escalado vertical es más sencillo, pero limitado, mientras que el horizontal es más complejo, pero ofrece mayor tolerancia a fallos y escalabilidad a largo plazo.


3) ¿Cómo se garantiza una alta disponibilidad en el diseño de un sistema?

Se espera del candidato: El entrevistador quiere evaluar su comprensión de la redundancia, los mecanismos de conmutación por error y la resiliencia del sistema.

Respuesta de ejemplo: En mi puesto anterior, garantizaba una alta disponibilidad mediante el uso de balanceadores de carga, la implementación de servicios en múltiples zonas de disponibilidad, la implementación de comprobaciones de estado y el diseño de servicios sin estado siempre que era posible. Estas estrategias redujeron los puntos únicos de fallo.


4) Describe una ocasión en la que tuviste que hacer un equilibrio entre consistencia y disponibilidad.

Se espera del candidato: El entrevistador está evaluando su comprensión del teorema CAP y su capacidad de toma de decisiones bajo restricciones.

Respuesta de ejemplo: En un puesto anterior, trabajé en un sistema donde la baja latencia era crucial. Optamos por la consistencia final en lugar de la consistencia fuerte para mantener la disponibilidad durante las particiones de la red, lo cual era aceptable para el caso de uso empresarial.


5) ¿Cómo decide qué base de datos utilizar para un sistema determinado?

Se espera del candidato: El entrevistador quiere ver cómo alinea las opciones de almacenamiento de datos con los requisitos del sistema.

Respuesta de ejemplo: Evalúo los patrones de acceso a los datos, los requisitos de consistencia, las necesidades de escalabilidad y la complejidad de las consultas. Las bases de datos relacionales funcionan bien para datos estructurados y transacciones, mientras que las bases de datos NoSQL son mejores para esquemas flexibles y de alto rendimiento.


6) ¿Cómo diseñarías un sistema para gestionar picos repentinos de tráfico?

Se espera del candidato: El entrevistador está probando su capacidad para diseñar teniendo en cuenta la escalabilidad y la carga impredecible.

Respuesta de ejemplo: Utilizaba grupos de escalado automático, balanceadores de carga y capas de almacenamiento en caché, como almacenes en memoria. En mi anterior puesto, estas técnicas permitían al sistema absorber picos de tráfico sin afectar el rendimiento.


7) ¿Qué papel juega el almacenamiento en caché en el diseño del sistema y dónde lo implementarías?

Se espera del candidato: El entrevistador quiere entender cómo optimizar el rendimiento y reducir la carga en los servicios principales.

Respuesta de ejemplo: El almacenamiento en caché mejora el tiempo de respuesta y reduce la carga de la base de datos. Se puede implementar en múltiples capas, incluyendo el lado del cliente, la CDN, la aplicación y el almacenamiento en caché de consultas de la base de datos, según el caso de uso.


8) ¿Cómo se gestiona la partición y fragmentación de datos?

Se espera del candidato: El entrevistador está evaluando su capacidad para diseñar sistemas que escalen datos horizontalmente.

Respuesta de ejemplo: Elijo una clave de fragmentación que distribuye los datos uniformemente y minimiza las consultas entre fragmentos. También planifico la refragmentación y superviso la distribución de datos para evitar puntos calientes a medida que el sistema crece.


9) Describa una situación en la que la monitorización del sistema influyó en una decisión de diseño.

Se espera del candidato: El entrevistador quiere ver cómo utiliza la observabilidad para mejorar la confiabilidad y el rendimiento del sistema.

Respuesta de ejemplo: La monitorización de métricas como la latencia y las tasas de error reveló un cuello de botella en un servicio API. Con base en esta información, rediseñé el servicio para que fuera asíncrono, lo que mejoró significativamente el rendimiento.


10) ¿Cómo comunicar diseños de sistemas complejos a partes interesadas no técnicas?

Se espera del candidato: El entrevistador está evaluando sus habilidades de comunicación y su capacidad para alinear las decisiones técnicas con los objetivos comerciales.

Respuesta de ejemplo: Me centro en conceptos de alto nivel, uso diagramas y relaciono los componentes técnicos con los resultados empresariales. Este enfoque ayuda a las partes interesadas a comprender el valor y el impacto del diseño sin perderse en detalles técnicos.

Resumir este post con: