Problem
A service
generally calls other services to retrieve data, and there is the chance that
the downstream service may be down. There are two problems with this: first,
the request will keep going to the down service, exhausting network resources
and slowing performance. Second, the user experience will be bad and
unpredictable. How do we avoid cascading service failures and handle failures
gracefully?
Solution
The
consumer should invoke a remote service via a proxy that behaves in a similar
fashion to an electrical circuit breaker. When the number of consecutive
failures crosses a threshold, the circuit breaker trips, and for the duration
of a timeout period, all attempts to invoke the remote service will fail
immediately. After the timeout expires the circuit breaker allows a limited
number of test requests to pass through. If those requests succeed, the circuit
breaker resumes normal operation. Otherwise, if there is a failure, the timeout
period begins again.
Netflix
Hystrix is a good implementation of the circuit breaker pattern. It also helps
you to define a fallback mechanism which can be used when the circuit breaker
trips. That provides a better user experience.
No comments:
Post a Comment