circuit breaker devoxxfr

Post on 07-Aug-2015

361 Views

Category:

Engineering

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

@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

top related