RpcLoadBalancer (rpc_load_balancer v0.2.1)

Copy Markdown View Source

Distributed RPC load balancer built on :pg.

Acts as a per-instance Supervisor that starts the caches and GenServer needed for a single load balancer. Also provides the public API for node selection, RPC calls/casts, and low-level :erpc wrappers.

Starting a load balancer

RpcLoadBalancer.start_link(
  name: :my_lb,
  selection_algorithm: RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.RoundRobin,
  algorithm_opts: [weights: %{node() => 1}]
)

Summary

Types

name()

@type name() :: atom()

Functions

call(node, module, fun, args, opts \\ [])

@spec call(node(), module(), atom(), [any()], keyword()) :: ErrorMessage.t_res(any())

call_on_random_node(node_filter, module, fun, args, opts \\ [])

@spec call_on_random_node(String.t(), module(), atom(), [any()], keyword()) ::
  ErrorMessage.t_res(any())

cast(node, module, fun, args, opts \\ [])

@spec cast(node(), module(), atom(), [term()], keyword()) ::
  :ok | {:error, ErrorMessage.t()}

cast_on_random_node(node_filter, module, fun, args, opts \\ [])

@spec cast_on_random_node(String.t(), module(), atom(), [any()], keyword()) ::
  :ok | {:error, ErrorMessage.t()}

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

get_members(load_balancer_name)

@spec get_members(name()) :: {:ok, [node()]} | {:error, ErrorMessage.t()}

select_node(load_balancer_name, opts \\ [])

@spec select_node(
  name(),
  keyword()
) :: {:ok, node()} | {:error, ErrorMessage.t()}

start_link(opts)

@spec start_link(keyword()) :: Supervisor.on_start()