Architektur Fortgeschritten
Circuit Breaker Pattern — Schutz vor Kaskadenfehlern¶
Circuit BreakerResiliencePatterns 3 Min. Lesezeit
Implementierung des Circuit Breaker Patterns für resiliente Microservices. Zustände, Konfiguration und praktische Beispiele.
Das Problem der Kaskadenfehler¶
Wenn Dienst B nicht antwortet, wartet Dienst A auf einen Timeout. Anfragen stauen sich und der Fehler breitet sich im gesamten System aus. Circuit Breaker scheitert schnell statt zu warten.
Drei Zustände¶
- Closed — Normalbetrieb, zählt Error Rate
- Open — Anfragen werden sofort abgelehnt
- Half-Open — lässt Testanfragen durch
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;
}
}
}
Bibliotheken¶
- Node.js: opossum
- Java: Resilience4j
- Python: pybreaker
- .NET: Polly
Zusammenfassung¶
Circuit Breaker ist ein Must-have in verteilter Architektur. Kombinieren Sie ihn immer mit Fallback-Logik und Monitoring.
Brauchen Sie Hilfe bei der Implementierung?¶
Unser Team hat Erfahrung mit dem Entwurf und der Implementierung moderner Architekturen. Wir helfen Ihnen gerne.