15 puntos por baeba 2025-05-13 | 1 comentarios | Compartir por WhatsApp

Sam Newman destacó Timeouts, Retries e Idempotency como tres conceptos clave que es indispensable entender en los sistemas distribuidos.
Dijo que, antes que algoritmos distribuidos complejos como Paxos o Raft, es más importante manejar correctamente estos conceptos básicos.


Tres premisas básicas de los sistemas distribuidos

  1. La información no se transmite de inmediato.
  2. El sistema del otro lado puede no responder.
  3. Los recursos son finitos.

Estas tres condiciones son la causa raíz de toda la complejidad en los sistemas distribuidos.


Timeouts

Si una solicitud no se completa dentro de cierto tiempo, debe interrumpirse.
Si ocupa recursos durante demasiado tiempo, puede provocar sobrecarga del sistema y afectar la experiencia del usuario.

Newman explicó que “los timeouts priorizan la salud general del sistema por encima del éxito de una sola solicitud”.

Puntos importantes

  • Entender el tiempo promedio de ejecución y las expectativas del usuario
  • Los valores de configuración deben poder cambiarse con flexibilidad sin modificar el código

Retries

Los retries excesivos pueden convertirse en un ataque DoS autoinfligido contra el sistema.
Los retries son necesarios, pero hay que considerar también los límites del lado del cliente y del servidor, así como el jitter de red.

Newman advirtió que agregar jitter es bueno, pero el backoff exponencial puede terminar cargando más al sistema.


Idempotency

El resultado debe ser el mismo aunque la solicitud se envíe varias veces.
Esto es principalmente responsabilidad del servidor y es una condición previa para que los retries sean seguros.

Escenario real

  • Si la solicitud no llegó al servidor: no pasa nada
  • Si el servidor la procesó pero la respuesta se cortó: el cambio sí ocurrió, pero el cliente no lo sabe → se necesita idempotency

Formas de implementación

  1. Usar un ID de solicitud: asignar un identificador para que el cliente pueda señalar que se trata de una solicitud repetida
  2. Método de fingerprint: determinar si hay duplicados con base en el hash del cuerpo de la solicitud, etc. (se recomienda evitar información temporal)

Conclusión

Aunque empezó citando la frase “repetir la misma acción esperando un resultado distinto es una locura”,
Newman dijo que en los sistemas distribuidos reintentar sí puede ser una decisión racional.
Pero subrayó que los retries siempre deben hacerse de forma segura, y para eso timeouts e idempotency deben diseñarse juntos.

1 comentarios

 
unknowncyder 2025-05-13

cortacircuitos~