Architektura Pokročilý
Circuit Breaker Pattern — ochrana před kaskádovým selháním¶
Circuit BreakerResiliencePatterns 3 min čtení
Implementace Circuit Breaker patternu pro resilientní mikroservisy. Stavy, konfigurace a praktické příklady.
Problém kaskádového selhání¶
Když služba B neodpovídá, služba A čeká na timeout. Requesty se hromadí a selhání se šíří celým systémem. Circuit Breaker rychle selže místo čekání.
Tři stavy¶
- Closed — normální provoz, počítá error rate
- Open — requesty se okamžitě zamítají
- Half-Open — pouští testovací requesty
class CircuitBreaker {
constructor(opts = {}) {
this.threshold = opts.failureThreshold || 5;
this.resetTimeout = opts.resetTimeout || 30000;
this.state = 'CLOSED';
this.failures = 0;
this.lastFailure = null;
}
async call(fn) {
if (this.state === 'OPEN') {
if (Date.now() - this.lastFailure > this.resetTimeout)
this.state = 'HALF_OPEN';
else throw new Error('Circuit OPEN');
}
try {
const result = await fn();
this.failures = 0; this.state = 'CLOSED';
return result;
} catch (e) {
this.failures++;
this.lastFailure = Date.now();
if (this.failures >= this.threshold) this.state = 'OPEN';
throw e;
}
}
}
Knihovny¶
- Node.js: opossum
- Java: Resilience4j
- Python: pybreaker
- .NET: Polly
Shrnutí¶
Circuit Breaker je must-have v distribuované architektuře. Vždy kombinujte s fallback logikou a monitoringem.
Potřebujete pomoct s implementací?¶
Náš tým má zkušenosti s návrhem a implementací moderních architektur. Rádi vám pomůžeme.