# rpc_load_balancer v0.3.0 - Table of Contents

RPC wrappers with a node load balancer

## Pages

- [RpcLoadBalancer](overview.md)

- Tutorials
  - [Tutorial: Getting Started with RpcLoadBalancer](getting-started.md)

- How-To Guides
  - [How to Write a Custom Selection Algorithm](custom-selection-algorithm.md)
  - [How to Use Hash-Based Routing](hash-based-routing.md)
  - [How to Filter Which Nodes Join a Load Balancer](node-filtering.md)
  - [How to Use Connection-Tracking Algorithms](connection-tracking.md)
  - [How to Configure Weighted Round Robin](weighted-round-robin.md)
  - [How to Test with the CallDirect Strategy](testing-with-call-direct.md)

- Reference
  - [Load Balancer Reference](load_balancer.md)

- Explanation
  - [Architecture and Design Decisions](architecture.md)

## 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.HashRingCache](RpcLoadBalancer.LoadBalancer.HashRingCache.md): ETS-backed cache for the consistent hash ring built by
`RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.HashRing`.
- [RpcLoadBalancer.LoadBalancer.IndexRegistry](RpcLoadBalancer.LoadBalancer.IndexRegistry.md): Assigns unique integer indices to arbitrary keys for a given cache.
- [RpcLoadBalancer.LoadBalancer.LoadBalancerOptsCache](RpcLoadBalancer.LoadBalancer.LoadBalancerOptsCache.md): Cache for parsed, immutable per-load-balancer options.
- [RpcLoadBalancer.LoadBalancer.NodeCpuCache](RpcLoadBalancer.LoadBalancer.NodeCpuCache.md): Shared ETS cache for CPU metrics, keyed by node.
- [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.LeastCpu](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.LeastCpu.md): Least CPU node selection algorithm.
- [RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.LeastCpu.Poller](RpcLoadBalancer.LoadBalancer.SelectionAlgorithm.LeastCpu.Poller.md): GenServer that periodically samples local CPU via `:cpu_sup` and fetches
remote node CPU via `:erpc.multicall/5`, storing all results in
`NodeCpuCache`.
- [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.Metrics](RpcLoadBalancer.Metrics.md): `Telemetry.Metrics` definitions for `RpcLoadBalancer.call/5` and
`RpcLoadBalancer.cast/5` spans.
- [RpcLoadBalancer.Retry](RpcLoadBalancer.Retry.md): Retry logic for RPC operations that may fail when no nodes are available.

