Ingeniero de Software: pregunta de entrevista

¿Qué hace difícil a un sistema distribuido?

Los sistemas distribuidos son difíciles porque los mensajes se retrasan, duplican, reordenan o pierden y los nodos fallan por separado. El diseño correcto explicita timeouts, reintentos, idempotencia, consistencia y fallos parciales.

Respuesta directa

Qué debe cubrir una buena respuesta

Cómo funciona

En una máquina una llamada a función devuelve o lanza. A través de la red el llamador nunca puede distinguir una solicitud perdida, una respuesta lenta y un servidor caído, así que toda llamada remota tiene timeout y todo reintento puede duplicar trabajo. Los relojes discrepan, así que ordenar por marca de tiempo no es fiable. Los nodos fallan de forma independiente, así que el sistema debe decidir qué hacer cuando solo algunos responden, lo que obliga a elegir entre consistencia y disponibilidad durante particiones. La disciplina consiste en hacer explícitos estos hechos: operaciones idempotentes, propiedad clara de cada dato y pruebas que inyectan fallos.

Ejemplo

Un servicio de pagos llamó a un servicio de libro mayor que expiró después de escribir la entrada; el reintento ingenuo creó un cargo doble. La solución dio a cada escritura un ID generado por el cliente para reconocer el segundo intento, y una prueba de caos que descarta el 5 por ciento de las respuestas corre ahora en CI para mantener honesta la garantía.

Errores frecuentes

  • Suponer que un timeout significa que la operación no ocurrió.
  • Usar marcas de tiempo de reloj de máquinas distintas para ordenar eventos.
  • Diseñar para el camino feliz y descubrir el fallo parcial en producción.

Una estructura útil para responder

Responde desde tu propia experiencia.

No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.

Practica esta respuesta con MiraHint

Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.

Descargar MiraHint
Preguntas de entrevista para Ingeniero de Software