Upload
mouhcine-moulou
View
363
Download
1
Embed Size (px)
Citation preview
@mouloumouhcine#CircuitBreaker
Tolerance au pannes avec
le Circuit Breaker Pattern
@mouloumouhcine Soat Consultant Scala
@mouloumouhcine#CircuitBreaker
Problème
Service 1 Service 2
@mouloumouhcine#CircuitBreaker
Problème
Service 1 Service 2
Gaspillage des Resources VM (Thread, Mémoire, etc.)
@mouloumouhcine#CircuitBreaker
Problème
Service 1 Service 2timeout
@mouloumouhcine#CircuitBreaker
Problème
Service 1 Service 2timeout
Performance
@mouloumouhcine#CircuitBreaker
Problème
Service 1
Service 3
Service 2
@mouloumouhcine#CircuitBreaker
Problème
Service 1
Service 3
Service 2
@mouloumouhcine#CircuitBreaker
Problème
Service 1
Service 3
Service 2
@mouloumouhcine#CircuitBreaker
Problème
Service 1
Service 3
Service 2
Cascading Failures
@YourTwitterHandle@YourTwitterHandle@mouloumouhcine#CircuitBreaker
Solution
@YourTwitterHandle@YourTwitterHandle@mouloumouhcine#CircuitBreaker
« Let It Crash & Handle with Grace. »
@mouloumouhcine#CircuitBreaker
Circuit Breaker
Service 1 Service 2
@mouloumouhcine#CircuitBreaker
Circuit Breaker
Service 1 Service 2
@mouloumouhcine#CircuitBreaker
Circuit Breaker
Service 1 Service 2Closed
@mouloumouhcine#CircuitBreaker
Circuit Breaker
Service 1 Service 2Open
@mouloumouhcine#CircuitBreaker
Circuit BreakerClosed
@mouloumouhcine#CircuitBreaker
Circuit BreakerClosed Open
Max Failures
@mouloumouhcine#CircuitBreaker
Circuit BreakerClosed Open
Half Open
?
Reset Timeout
Max Failures
@mouloumouhcine#CircuitBreaker
Circuit BreakerClosed Open
Half Open
?
Reset TimeoutKO
OK
Max Failures
@mouloumouhcine#CircuitBreaker
// Akka Implementationval breaker: CircuitBreaker = new CircuitBreaker( getContext().dispatcher(), getContext().system().scheduler(), // Scheduler 50, // maxFailures Duration.create(5, "s"), // Call Timeout Duration.create(1, "m") // Reset Timeout)
Exemple
@mouloumouhcine#CircuitBreaker
// Sans Circuit Breaker dangerousCall();
Exemple
@mouloumouhcine#CircuitBreaker
// Avec Circuit Breaker // Appel Scalabreaker.callWithCircuitBreaker( Future{
dangerousCall() }
)
Exemple
@mouloumouhcine#CircuitBreaker
// Callable new Callable<String>() { public String call() throws Exception { return dangerousCall(); } }
Exemple
@mouloumouhcine#CircuitBreaker
// Avec Circuit Breaker // Appel Javabreaker.callWithCircuitBreaker( new Callable<String>() { public String call() throws Exception { return dangerousCall(); } })
Exemple
@mouloumouhcine#CircuitBreaker
breaker.onOpen( // …
// … )
Exemple
@mouloumouhcine#CircuitBreaker
breaker.onOpen( // …
// … );
breaker.onClose( // …
// … )
Exemple
@mouloumouhcine#CircuitBreaker
Circuit BreakerAvantages•Réponse rapide.•Meilleur utilisation des resources.•Cascading failures.•Monitoring.
@mouloumouhcine#CircuitBreaker
Circuit BreakerAvantages•Réponse rapide.•Meilleur utilisation des resources.•Cascading failures.•Monitoring.
Inconvénients• Impossibilité de filtrer les exceptions
@mouloumouhcine#CircuitBreaker
Circuit BreakerAvantages•Réponse rapide.•Meilleur utilisation des resources.•Cascading failures.•Monitoring.
Inconvénients• Impossibilité de filtrer les exceptions
ESSAYEZ LE !
@YourTwitterHandle@YourTwitterHandle@mouloumouhcine#CircuitBreaker