You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Breaky provides a way to supervise and manage modules and processes depending on external
resources. For these kind of processes standard OTP supervisors will not work. The problem
is that if something fails, the supervisor can't return the state of an external process
into a known good state by restarting. The supervisor has no control over it. When that happens
too often, the supervisor will fail too, and if a supervisor is restarted often enough it
can take down the whole system down.
Breaky acts as a automatic circuit breaker "middleman" for these kind of processes. The
process are started and managed in a normal OTP supervision tree. Restarts are managed
by a circuit breaker FSM. When the FSM detects too many failures it will try to re-establish
the service, but when a certaint threshold of restarts has been reached the restarts will be
done in a slower rate and calls or casts to the failing process will result in off to notify
that the circuit breaker is off and the process is not available. This will prevent the fault
from cascading through the system.
Example:
%% Start the circuit breaker for the database. It is an external resource.Args= [{user, "me"}, {password, "1234"}],
{ok, _Pid} =breaky:start_circuit_breaker(db, {database, start_link, Args}),
...
casebreaky:call(db, "select * from my_table;") ofoff ->
error_logger:error_msg("database unavailable");
{error, db_unavailable};
{ok, Result} ->
Resultend,
...
Circuit Breaker States
State
Description
Off
The service is not available
On
The service is running normally
About
Fusebox provides a way to supervise and manage modules and processes depending on external resources.