Skip to content
ENExplore Calculators

Endpoint Distribution Calculator

Calculate how evenly traffic spreads across Service endpoints as replicas scale.

About Endpoint Distribution Calculator

In an ideal world a Service's traffic splits evenly across every endpoint, but kube-proxy's iptables/IPVS mode uses randomized selection rather than true round-robin, and long-lived connections (especially gRPC/HTTP2 with keep-alive) can pin disproportionate traffic to whichever endpoints were selected early. This calculator compares a pod's actual measured RPS against the theoretical even split to quantify how skewed real-world distribution has become.

Formula

skew% = ((busiestRPS - expectedRPS) / expectedRPS) × 100

R_b
Busiest endpoint's actual RPS
R_e
Expected per-endpoint RPS (totalRPS / endpointCount)
S
Skew percentage

Worked example

With the default values below, Endpoint Distribution Calculator returns Expected RPS per Endpoint of 500.0. Change any input above and every figure here is recalculated in your browser.

Inputs used

Total Trafficaccepts 0–10,000,000 req/s
4,000 req/s
Endpoint Countaccepts 1–1,000,000 endpoints
8 endpoints
Busiest Endpoint's Actual RPSaccepts 0–10,000,000 req/s
750 req/s

Results

Expected RPS per Endpoint
500.0 req/s
Busiest Endpoint Skew
50.0%
Absolute Skew
250.0 req/s
Significant Skew Detected
true

Step by step

  1. 1Expected per-endpoint RPS = total ÷ endpoint count= 500.0 req/s
  2. 2Skew of busiest endpoint= 50.0%

Assumptions and limits

  • The result is derived only from the 3 inputs listed above. Anything not among them is not part of the calculation.
  • In particular, this calculator does not take inflation, tax or compounding frequency into account.
  • Figures are rounded for display to 1 decimal place, so totals built from several rounded parts can differ slightly from the unrounded arithmetic.

How these calculators are built and tested is described on the Methodology page. If a figure looks wrong, please report it.

Frequently Asked Questions

Why is Kubernetes Service load balancing not perfectly even?

Default kube-proxy modes (iptables, IPVS) make independent random selections per new connection rather than tracking global round-robin state — with enough connections this averages out, but with few long-lived connections (especially persistent gRPC/HTTP2), randomness alone can create lasting skew.

How does connection reuse make skew worse?

HTTP2 and gRPC multiplex many requests over one long-lived TCP connection — once that connection lands on an endpoint via load balancing, all its requests go to that same endpoint until the connection closes, unlike HTTP/1.1 where each new connection gets a fresh chance at balanced selection.

What fixes significant endpoint skew?

For gRPC/HTTP2 workloads, use client-side load balancing or a service mesh (e.g. Istio, Linkerd) that balances at the request level rather than the connection level; also consider setting max connection age to force periodic reconnection and rebalancing.

Endpoint Distribution Calculator | Calcrivo