Resumen
Monitorea primary search API health y automaticamente routes consultas to un backup proveedor cuando el primary fails. Implementa un circuit breaker ese trips despues de consecutive errores y resets despues de un cooldown periodo con successful verificaciones de estado.
Desencadenador
Every search llamada un API (wrapper function)
Programación
On cada search call (middleware patron)
Pasos del flujo de trabajo
Verificar circuit breaker estado
Before cada search call, verificar if el circuit breaker es open (tripped). Si open y cooldown tiene no elapsed, route directamente to el fallback proveedor.
Ejecutar primary search
Enviar el consulta to el primary search API (Scavio). Rastrear tiempo de respuesta y HTTP estado code.
Record outcome
On success con acceptable latencia, clear el failure counter. On error o timeout, increment el failure counter.
Trip circuit breaker if umbral reached
After 3 consecutive failures, trip el circuit breaker y registro un alerta. Set el cooldown timer.
Route to fallback
Cuando el circuit es open, enviar consultas to el backup search proveedor. Normalize el respuesta to match el primary formato.
Health verificar y reset
After cooldown elapses, enviar un canary consulta to el primary. Si it succeeds, close el circuit y resume primary enrutamiento.
Implementacion en Python
import requests, os, time
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
failures = []
circuit_open = False
circuit_opened_at = 0
COOLDOWN = 60
def search(query, platform="google"):
global circuit_open, circuit_opened_at
if circuit_open and time.time() - circuit_opened_at < COOLDOWN:
return fallback_search(query, platform)
if circuit_open:
circuit_open = False
failures.clear()
try:
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": platform, "query": query}, timeout=10)
r.raise_for_status()
failures.clear()
return r.json()
except Exception:
failures.append(time.time())
if len(failures) >= 3:
circuit_open = True
circuit_opened_at = time.time()
return fallback_search(query, platform)
raise
def fallback_search(query, platform):
return {"source": "fallback", "query": query, "results": []}Implementacion en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
let failures = 0;
let circuitOpen = false;
let circuitAt = 0;
async function search(query, platform = "google") {
if (circuitOpen && Date.now() - circuitAt < 60000) {
return {source: "fallback", query, results: []};
}
if (circuitOpen) { circuitOpen = false; failures = 0; }
try {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform, query})
});
if (!r.ok) throw new Error("HTTP " + r.status);
failures = 0;
return r.json();
} catch (e) {
if (++failures >= 3) { circuitOpen = true; circuitAt = Date.now(); }
throw e;
}
}Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
Amazon
Búsqueda de productos con precios, calificaciones y reseñas
YouTube
Búsqueda de videos con transcripciones y metadatos
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit