# rpc_load_balancer v0.2.1 - API Reference

## Modules

- [RpcLoadBalancer](RpcLoadBalancer.md): Distributed RPC load balancer built on `:pg`.
- [RpcLoadBalancer.Config](RpcLoadBalancer.Config.md): Configuration defaults for `RpcLoadBalancer`.
- [RpcLoadBalancer.LoadBalancer](RpcLoadBalancer.LoadBalancer.md): GenServer responsible for joining the `:pg` group, monitoring membership
changes, and performing graceful connection draining on shutdown.

- [RpcLoadBalancer.LoadBalancer.AlgorithmCache](RpcLoadBalancer.LoadBalancer.AlgorithmCache.md)
- [RpcLoadBalancer.LoadBalancer.CounterCache](RpcLoadBalancer.LoadBalancer.CounterCache.md): Shared atomic counters for slot-based round-robin and
per-node connection tracking across all load balancers.

- [RpcLoadBalancer.LoadBalancer.Drainer](RpcLoadBalancer.LoadBalancer.Drainer.md): Tracks in-flight RPC calls and provides graceful connection draining.
- [RpcLoadBalancer.LoadBalancer.DrainerCache](RpcLoadBalancer.LoadBalancer.DrainerCache.md): Shared atomic counter for tracking in-flight calls per load balancer.

- [RpcLoadBalancer.LoadBalancer.IndexRegistry](RpcLoadBalancer.LoadBalancer.IndexRegistry.md): Assigns unique integer indices to arbitrary keys for a given cache.
- [RpcLoadBalancer.LoadBalancer.Pg](RpcLoadBalancer.LoadBalancer.Pg.md): Wrapper around `:pg` used by `RpcLoadBalancer.LoadBalancer`.

- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.md): Behaviour for load balancer node selection.

- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.CallDirect](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.CallDirect.md): Selection algorithm that executes calls directly on the local node.
- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.HashRing](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.HashRing.md): Consistent hash ring node selection algorithm powered by `libring`.
- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.LeastConnections](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.LeastConnections.md): Least connections node selection algorithm.
- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.PowerOfTwo](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.PowerOfTwo.md): Power of Two Choices node selection algorithm.
- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.Random](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.Random.md): Random node selection algorithm.

- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.RoundRobin](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.RoundRobin.md): Round robin node selection algorithm.
- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.WeightedRoundRobin](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.WeightedRoundRobin.md): Weighted round robin node selection algorithm.
- [RpcLoadBalancer.LoadBalancer.ValueCache](RpcLoadBalancer.LoadBalancer.ValueCache.md)
- [RpcLoadBalancer.Retry](RpcLoadBalancer.Retry.md): Retry logic for RPC operations that may fail when no nodes are available.

