
Circuit Breaker Design Pattern - kushti
http://doc.akka.io/docs/akka/snapshot/common/circuitbreaker.html
======
jdmichal
While it matches that of a physical circuit breaker, I think the choice of
naming is a bit unfortunate. Closed means the operation is open to new
requests, while open means the operation is closed to new requests. This is
confusing when compared the normal Java semantics of opened and closed. I
think this is an instance where the skeuomorphism (of sorts) was taken a
little too far.

------
breckinloggins
Interesting.

For event signup, preorder, and ticket purchasing sites (which tend to
experience little or no load most of the time and an insane amount of load
right before some important deadline or right after an announcement), I wonder
if this could be used to redirect the user to a page that either says "take a
number and we'll call you back" or a page that says "we're experiencing high
traffic, you can send an email at _this link_ and we'll get back to you as
soon as we can."

The email link thing might work, but the "take a number" system would probably
be under the same traffic constraints that caused the intended transaction to
fail. Maybe not, though. Maybe that could work on a cheaper, more scalable
mechanism.

~~~
dragonwriter
Rather than providing information to the user by which they can access an
alternate, asynchronous request/response flow, why not separate the server
from the web-ui from the server for the backend processing system, and when
there is too much load on the backend system to effectively do synchronous
request/response, failover to an asynchronous workflow?

~~~
breckinloggins
I thought I remembered reading somewhere that techniques like this only move
the back-pressure to other parts of the system rather than solve the problem.
There's a load point beyond which you have almost no choice but to throw
requests away.

It was something like [1] but I don't think that was the exact article I read.

[1] [http://mechanical-sympathy.blogspot.com/2012/05/apply-
back-p...](http://mechanical-sympathy.blogspot.com/2012/05/apply-back-
pressure-when-overloaded.html)

~~~
bkirwi
Probably this one?

[http://ferd.ca/queues-don-t-fix-overload.html](http://ferd.ca/queues-don-t-
fix-overload.html)

Queues and similar things help flatten out the spikes, but they don't add
capacity. Like many of these tools, use with discretion.

~~~
breckinloggins
Yes, that one. Thank you.

------
angersock
I first read about this in the excellent book _Release it!_
[http://www.amazon.com/Release-Production-Ready-Software-
Prag...](http://www.amazon.com/Release-Production-Ready-Software-Pragmatic-
Programmers/dp/0978739213/ref=sr_1_1?ie=UTF8&qid=1423875882&sr=8-1&keywords=release+it)
.

It's an really interesting read, and kind of a proto-devops book.

------
illicium
Emulating Erlang supervisors in Java? :)

~~~
kungfooguru
Na, there are multiple implementations of this in Erlang, it isn't
supervision,
[https://github.com/klarna/circuit_breaker](https://github.com/klarna/circuit_breaker)
and [https://github.com/jlouis/fuse](https://github.com/jlouis/fuse)

------
ghuntley
.NET/C# implementation as a portable class library for server side and client
(xamarin/windows phone) @ [https://github.com/michael-
wolfenden/Polly](https://github.com/michael-wolfenden/Polly)

------
dminor
Netflix's Hystrix is another implementation of this pattern.

