# rpc_load_balancer v0.2.1 - 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.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.