Resiliencia (Rust)
Patrones de resiliencia
Sección titulada «Patrones de resiliencia»ai-lib-rust (v0.7.1) incluye patrones de confiabilidad de nivel producción de serie. Las decisiones de reintento y fallback utilizan códigos de error estándar V2: las propiedades retryable y fallbackable en StandardErrorCode determinan si un error desencadena reintentos o fallback de modelo.
Circuit Breaker
Sección titulada «Circuit Breaker»Previene fallos en cascada al detener las solicitudes a proveedores con fallos:
Estados:
- Closed — Operación normal, las solicitudes fluyen
- Open — Demasiados fallos, las solicitudes se rechazan inmediatamente
- Half-Open — Después del enfriamiento, permite una solicitud de prueba
Configuración:
export AI_LIB_BREAKER_FAILURE_THRESHOLD=5export AI_LIB_BREAKER_COOLDOWN_SECS=30El circuito se abre después de FAILURE_THRESHOLD fallos consecutivos y permanece abierto durante COOLDOWN_SECS antes de la prueba.
Limitador de velocidad
Sección titulada «Limitador de velocidad»El algoritmo de token bucket previene exceder los límites de velocidad del proveedor:
export AI_LIB_RPS=10 # Máximo de solicitudes por segundoexport AI_LIB_RPM=600 # Máximo de solicitudes por minutoLas solicitudes que excedan el límite se encolan en lugar de rechazarse, proporcionando un rendimiento fluido.
Backpressure
Sección titulada «Backpressure»Limita las solicitudes concurrentes en curso con un semáforo:
export AI_LIB_MAX_INFLIGHT=50Cuando se alcanza el límite, las nuevas solicitudes esperan hasta que se libere un espacio.
Reintentos
Sección titulada «Reintentos»Reintento con backoff exponencial impulsado por la política de reintento del manifiesto del protocolo:
# In the provider manifestretry_policy: strategy: "exponential_backoff" max_retries: 3 initial_delay_ms: 1000 max_delay_ms: 30000 retryable_errors: - "rate_limited" - "overloaded" - "server_error"Solo los errores clasificados como reintentables desencadenan reintentos. Los errores de autenticación, por ejemplo, fallan inmediatamente.
Combinación de patrones
Sección titulada «Combinación de patrones»Todos los patrones de resiliencia funcionan juntos. Un flujo de solicitud típico:
- Backpressure — Esperar un espacio si está al máximo de solicitudes en curso
- Circuit Breaker — Rechazar inmediatamente si el circuito está abierto
- Limitador de velocidad — Esperar un token si hay límite de velocidad
- Ejecutar — Enviar la solicitud
- Reintentar — Si es error reintentable, esperar y reintentar
- Actualizar — Registrar éxito/fallo para el circuit breaker
Observabilidad
Sección titulada «Observabilidad»Monitoree el estado de resiliencia en tiempo de ejecución:
// Check circuit breaker statelet state = client.circuit_state();println!("Circuit: {:?}", state); // Closed, Open, HalfOpen
// Check current inflight countlet inflight = client.current_inflight();Próximos pasos
Sección titulada «Próximos pasos»- Características avanzadas — Embeddings, caché, plugins
- API AiClient — Uso del cliente