← Lumbre

Sistemas Distribuidos · 6.º Fallos, timeouts y patrones de resiliencia

← Volver a todos los contenidos
Portada de Fallos, timeouts y patrones de resiliencia

Fallos, timeouts y patrones de resiliencia

✦ Por qué una dependencia lenta puede tumbar todo un sistema y cómo los patrones de resiliencia (timeout, retry con jitter, idempotencia, circuit breaker, bulkhead) acotan el fallo sin amplificarlo · Sistemas Distribuidos · Ingeniería de Datos · 6 minutos que valen la pena

Roadwise Consulting

Firmado y verificado · Fernando Castro

Objetivo: Explicar el fallo parcial en sistemas distribuidos y aplicar timeouts, reintentos con backoff, idempotencia, circuit breaker y bulkhead para contener el daño.

6 min 18–30 años
Autoevaluación
Más
Fallos, timeouts y patrones de resiliencia

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Objetos Cursos Explorar Mi cuenta Salir del modo estudio

Fallos, timeouts y patrones de resiliencia

Resiliencia frente a fallos distribuidos
Video explicativo (inglés): patrones de circuit breaker, retries y timeouts para manejar fallos en sistemas distribuidos.

Cuando un servicio llama por red a otro, entran tres enemigos que no existen dentro de un proceso: latencia incierta, particiones de red y fallos parciales. No sabes si tu petición se perdió al ir o si la respuesta se perdió al volver. Todos los patrones de resiliencia nacen de aceptar esa incertidumbre.

El fallo parcial

Un nodo puede estar "vivo" para unos y "muerto" para otros. Ante una llamada sin respuesta, no hay forma de distinguir en el instante si la petición llegó, se procesó o se perdió; por eso la corrección exige idempotencia, no solo reintentos.

  • Caídas: el servicio remoto no responde.
  • Latencia variable: responde, pero tarde, y bloquea a quien espera.
  • Partición de red: ambos sanos pero incomunicados.

Timeouts: ponle reloj a todo

Toda llamada remota necesita un tiempo máximo. Sin timeout, un hilo espera para siempre, se agotan las conexiones y una dependencia lenta tumba a tu servicio. Un timeout demasiado corto, en cambio, cancela trabajo que iba a terminar y dispara reintentos inútiles.

Diagrama de tres bandas: arriba tu servicio que inicia la llamada; en el centro los patrones en el camino (timeout, retry con backoff, circuit breaker, bulkhead); abajo los servicios remotos a los que se llama, que pueden fallar de forma independiente.
Entre tu servicio y una dependencia lenta o caida se interponen los cuatro patrones que acotan el daño.

Reintentos: útiles y peligrosos

Reintentar salva fallos transitorios, pero reintento sin control amplifica la carga: si todos los clientes reintentan a la vez sobre un servicio caído, se arma una tormenta de reintentos que impide que se recupere.

  • Backoff exponencial: espera cada vez más entre intentos.
  • Jitter: aleatoriza la espera para que los clientes no coincidan.
  • Presupuesto de reintentos: límite global para no amplificar el fallo.

Idempotencia: repetir sin dañar

Una operación es idempotente si ejecutarla varias veces tiene el mismo efecto que ejecutarla una. Es lo que hace seguros a los reintentos. Un PUT que fija un valor es idempotente; un POST que crea un cargo, no. Cuando la operación no es naturalmente idempotente, se añade una clave de idempotencia que el servidor usa para descartar duplicados.

Cada patrón cubre un modo distinto de fallo; se complementan.
PatrónQué protegeRiesgo si se omite
TimeoutQue una dependencia lenta congele recursosHilos y conexiones agotados
Retry + backoffFallos transitorios brevesTormenta de reintentos
Circuit breakerNo martillar un servicio caídoColapso en cascada
BulkheadAislar recursos por dependenciaUn fallo consume todo el servicio
IdempotenciaRepetir sin duplicar efectosCargos o escrituras duplicadas

Circuit breaker: descansar al servicio caído

Un interruptor cuenta fallos; si superan un umbral, se abre y deja de llamar durante una ventana, fallando rápido sin sobrecargar al dependiente. Tras el descanso pasa a medio abierto: deja pasar algunas llamadas para probar; si van bien, se cierra y se reanuda el tráfico normal.

Bulkhead: compartimentos estancos

Como en un barco, se divide recursos (hilos, conexiones) por dependencia, para que una llamada lenta a un servicio llene solo su compartimento y no hunda el buque completo. Un fallo aislado no consume la capacidad de todo el servicio.

Errores frecuentes

  • Reintentar de inmediato y sin tope sobre un error que no era transitorio.
  • Poner timeouts mayores que el SLA del propio servicio, propagando esperas.
  • Diseñar operaciones de escritura no idempotentes y exponerlas a reintentos.

Ejemplo resuelto: llamada a una pasarela de pago

Un servicio cobra llamando a una pasarela externa que a veces se tarda o responde mal. Secuencia de defensa:

  1. Fijar un timeout por debajo del tiempo que el usuario está dispuesto a esperar.
  2. Enviar una clave de idempotencia para que un reintento no cobre dos veces.
  3. Reintentar con backoff exponencial y jitter, con presupuesto máximo.
  4. Abrir un circuit breaker si la pasarela falla de forma sostenida.
  5. Aislar con bulkhead las conexiones de pago para no afectar otras funciones.

¿Para qué sirve en la realidad?

Los grandes apagones de servicios en línea rara vez nacen de un solo fallo: nacen de un fallo pequeño que se amplificó por reintentos y esperas sin límites. La resiliencia es lo que convierte una molestia local en algo que el usuario casi no nota.

¿Qué problema intenta resolver principalmente un circuit breaker?

Reintentar una operación no idempotente puede provocar efectos duplicados, como un doble cargo.

La espera creciente entre reintentos, con variación aleatoria para que los clientes no coincidan, se llama backoff exponencial con .

Clasifica cada patrón según el problema que resuelve.

Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.

Une cada patrón con su idea central.

      Resiliencia distribuida

      No ejecutar varias veces cambia el resultado
      idempotencia
      Deja de llamar a un servicio caído un rato
      circuit breaker
      Esperas aleatorias entre reintentos
      jitter
      Compartimentos de recursos por dependencia
      bulkhead
      Tiempo máximo de espera de una llamada
      timeout

      Toca una tarjeta para ver la respuesta.

      Fallos, timeouts y patrones de resiliencia

      • Resiliencia
        • Fallo parcial
          • latencia incierta
            • particion de red
            • Timeouts
              • acotar espera
              • Reintentos
                • backoff exponencial
                  • jitter y presupuesto
                  • Idempotencia
                    • repetir sin danar
                      • clave de idempotencia
                      • Aislar
                        • circuit breaker
                          • bulkhead

                        Tu servicio de checkout depende de una pasarela de pago que empieza a responder en 8 segundos aunque suele tardar 200 ms. Sin tocar la pasarela, ¿qué combinación de timeout, reintentos, breaker y bulkhead aplicarías para que ese deterioro no tumbe toda la tienda?

                        Tu texto se guarda sólo en este dispositivo.

                        Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.

                        Autoevaluación

                        Comprueba lo que aprendiste

                        2 preguntas · ves cada respuesta al momento · el resultado queda guardado en tu historial

                        Iniciar autoevaluación
                        Más sobre esta lección

                        Rutas vivas

                        ¿Y ahora qué? Elige el camino por lo que necesitas

                        No es un listado al azar: cada camino responde una pregunta distinta y te dice por qué.

                        Otra forma de comprenderlo

                        ✦ Explorar el universo completo
                        Explora temas relacionados

                        Conceptos

                        Comentarios

                        Inicia sesión para comentar.

                        Todavía no hay comentarios. Sé la primera persona en opinar.