🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)
🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)

🔧 Programmierung 🕛 kürzlich 5 Min Lesezeit
0

Retry Pattern: Manejando Fallos Transitorios en Sistemas Distribuidos

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

En entornos distribuidos, los fallos transitorios son inevitables: latencia de red, timeouts, servicios temporalmente no disponibles. El patrón Retry proporciona una estrategia robusta para manejar estos fallos temporales, permitiendo que las aplicaciones se recuperen automáticamente de errores que pueden resolverse por sí solos.






Comprendiendo el Patrón Retry



El patrón Retry implementa una estrategia de reintentos automáticos cuando una operación falla, asumiendo que la causa del fallo es temporal y puede resolverse sin intervención manual. La clave está en distinguir entre fallos transitorios y permanentes, y aplicar estrategias de reintento apropiadas.






Estrategias Comunes





  1. Retry Inmediato: Reintenta la operación inmediatamente.


  2. Retry con Backoff: Incrementa el tiempo entre reintentos.


  3. Retry Exponencial: Duplica el tiempo de espera entre intentos.


  4. Retry con Jitter: Añade aleatoriedad para evitar thundering herd.






Implementación Práctica



Veamos diferentes implementaciones del patrón Retry en Python:






1. Retry Simple con Decorador






CODE
import time
from functools import wraps
from typing import Callable, Type, Tuple

def retry(
exceptions: Tuple[Type[Exception]] = (Exception,),
max_attempts: int = 3,
delay: float = 1
):
def decorator(func: Callable):
@wraps(func)
def wrapper(*args, **kwargs):
attempts = 0
while attempts < max_attempts:
try:
return func(*args, **kwargs)
except exceptions as e:
attempts += 1
if attempts == max_attempts:
raise e
time.sleep(delay)
return None
return wrapper
return decorator

@retry(exceptions=(ConnectionError, TimeoutError), max_attempts=3)
def fetch_data(url: str):
# Simulación de llamada a API
return requests.get(url)









2. Retry con Backoff Exponencial






CODE
import random
from typing import Optional

class ExponentialBackoff:
def __init__(
self,
initial_delay: float = 1.0,
max_delay: float = 60.0,
max_attempts: int = 5,
jitter: bool = True
):
self.initial_delay = initial_delay
self.max_delay = max_delay
self.max_attempts = max_attempts
self.jitter = jitter
self.attempt = 0

def next_delay(self) -> Optional[float]:
if self.attempt >= self.max_attempts:
return None

delay = min(
self.initial_delay * (2 ** self.attempt),
self.max_delay
)

if self.jitter:
delay *= (0.5 + random.random())

self.attempt += 1
return delay

async def retry_operation(operation: Callable, backoff: ExponentialBackoff):
last_exception = None

while (delay := backoff.next_delay()) is not None:
try:
return await operation()
except Exception as e:
last_exception = e
await asyncio.sleep(delay)

raise last_exception









3. Retry con Circuit Breaker






CODE
from dataclasses import dataclass
from datetime import datetime, timedelta

@dataclass
class CircuitBreakerConfig:
failure_threshold: int = 5
reset_timeout: timedelta = timedelta(minutes=1)
retry_timeout: timedelta = timedelta(seconds=10)

class CircuitBreaker:
def __init__(self, config: CircuitBreakerConfig):
self.config = config
self.failures = 0
self.last_failure = None
self.state = "CLOSED"

def can_retry(self) -> bool:
if self.state == "CLOSED":
return True

if self.state == "OPEN":
if datetime.now() - self.last_failure > self.config.reset_timeout:
self.state = "HALF_OPEN"
return True
return False

return True # HALF_OPEN

def record_failure(self):
self.failures += 1
self.last_failure = datetime.now()

if self.failures >= self.config.failure_threshold:
self.state = "OPEN"

def record_success(self):
if self.state == "HALF_OPEN":
self.state = "CLOSED"
self.failures = 0
self.last_failure = None

async def retry_with_circuit_breaker(
operation: Callable,
circuit_breaker: CircuitBreaker,
backoff: ExponentialBackoff
):
while True:
if not circuit_breaker.can_retry():
raise Exception("Circuit breaker is open")

try:
result = await operation()
circuit_breaker.record_success()
return result
except Exception as e:
circuit_breaker.record_failure()
if (delay := backoff.next_delay()) is None:
raise e
await asyncio.sleep(delay)









Aplicaciones en la Nube



El patrón Retry es especialmente útil en escenarios cloud:






1. Comunicación entre Microservicios






CODE
from fastapi import FastAPI, HTTPException
from tenacity import retry, stop_after_attempt, wait_exponential

app = FastAPI()

@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=4, max=10),
retry=retry_if_exception_type(ConnectionError)
)
async def call_dependent_service(data: dict):
async with httpx.AsyncClient() as client:
response = await client.post(
"http://dependent-service/api/v1/process",
json=data,
timeout=5.0
)
return response.json()

@app.post("/process")
async def process_request(data: dict):
try:
return await call_dependent_service(data)
except Exception:
raise HTTPException(
status_code=503,
detail="Service temporarily unavailable"
)









2. Operaciones con Base de Datos






CODE
from sqlalchemy import create_engine
from sqlalchemy.exc import OperationalError
from contextlib import contextmanager

class DatabaseRetry:
def __init__(self, url: str, max_attempts: int = 3):
self.engine = create_engine(url)
self.max_attempts = max_attempts

@contextmanager
def session(self):
attempt = 0
while True:
try:
with self.engine.connect() as connection:
yield connection
break
except OperationalError:
attempt += 1
if attempt >= self.max_attempts:
raise
time.sleep(2 ** attempt)









Beneficios del Patrón Retry





  1. Resiliencia: Maneja automáticamente fallos transitorios.


  2. Disponibilidad: Mejora la disponibilidad general del sistema.


  3. Transparencia: Los reintentos son transparentes para el usuario.


  4. Flexibilidad: Permite diferentes estrategias según el caso de uso.






Consideraciones de Diseño



Al implementar el patrón Retry, considera:





  1. Idempotencia: Las operaciones deben ser seguras para reintentar.


  2. Timeouts: Establece límites claros para los reintentos.


  3. Logging: Registra los reintentos para monitorización.


  4. Backoff: Usa estrategias que eviten sobrecarga del sistema.






Conclusión



El patrón Retry es esencial en arquitecturas distribuidas modernas. Una implementación cuidadosa, considerando la idempotencia y las estrategias de backoff, puede mejorar significativamente la resiliencia de tu sistema. Sin embargo, debe usarse juiciosamente para evitar ocultar problemas sistémicos que requieren atención.

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
3 Quellen
GPT-6 Astra Release Today? OpenAI’s Next Major AI Model Is Almost Here
1 Quelle
Apple accuses OpenAI of destroying evidence as trade-secrets fight intensifies
1 Quelle
Major AI platforms go down in unprecedented simultaneous outage
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Retry Pattern: Manejando Fallos Transitorios en Sistemas Distribuidos

Thematisch verwandte Begriffe: Retry, Pattern, Manejando, Fallos · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...