danabr / fuse-lb

Load Balancer for Erlang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Fuse-LB

Simple Erlang application for load balancing requests to a pool of resources. Handling retries in case of failures.

Building

Dependencies

Requires rebar in your path.

Building Fuse-LB

$ make

Running unit tests

$ make eunit

Example

> Probe = fun(X) -> {available, X} end.
#Fun<erl_eval.6.82930912>
> {ok, Lb} = fuse_lb:start_link([{user_data1, [3000], Probe},
                                 {user_data2, [3000], Probe},
                                 {user_data3, [3000], Probe}],
                                 round_robin).
{ok,<0.322.0>}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data1}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data2}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data3}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data1}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data2}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data3}
> fuse_lb:call(Lb, fun(Data) -> {unavailable, Data} end).  %% Make fuse 1 unavailable.
{ok,user_data1}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data2}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data3}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data2}
>
> %% Wait 3s.
>
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data3}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data1}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data2}
> fuse_lb:call(Lb, fun(Data) -> {available, Data} end).
{ok,user_data3}

Fuse-LB: Copyright (c) 2014 Ulf Leopold.

About

Load Balancer for Erlang

License:Apache License 2.0


Languages

Language:Erlang 100.0%