macula_provider_selector (macula v0.20.5)
View SourceProvider selection strategies for multi-provider RPC load balancing.
Supports multiple strategies for choosing which provider to use when multiple providers advertise the same service.
Strategies: - round_robin: Distribute calls evenly across providers - random: Random provider selection - first: Always use first provider (default/simple)
Summary
Types
Provider information returned from DHT.
Selection strategy for choosing a provider from multiple options.
Functions
Select a provider from a list using the default strategy (random).
Select a provider from a list using a specific strategy.
Types
-type provider_info() :: #{node_id := binary(), endpoint := binary(), metadata := map(), advertised_at => integer(), ttl => pos_integer()}.
Provider information returned from DHT.
-type selection_state() :: #{strategy => strategy(), counters => #{binary() => non_neg_integer()}}.
-type strategy() :: round_robin | random | first.
Selection strategy for choosing a provider from multiple options.
Functions
-spec select_provider([provider_info()], selection_state()) -> {ok, provider_info(), selection_state()} | {error, no_providers}.
Select a provider from a list using the default strategy (random).
Returns the selected provider or error if list is empty.
-spec select_provider([provider_info()], strategy(), selection_state()) -> {ok, provider_info(), selection_state()} | {error, no_providers}.
Select a provider from a list using a specific strategy.
Strategies: - first: Always select the first provider (simple, no state) - random: Randomly select a provider - round_robin: Distribute calls evenly using a counter
Examples:
%% Random selection
State = new_state(random),
{ok, Provider, State2} = select_provider(Providers, random, State).
%% Round-robin selection
State = new_state(round_robin),
{ok, P1, State2} = select_provider(Providers, round_robin, State),
{ok, P2, State3} = select_provider(Providers, round_robin, State2),
%% P1 and P2 will be different providers (if multiple available)