Implementing Load Balancing

1. Configuring Round Robin Algorithm

PropertyValue
DistributionEven, rotational
StateStateless counter
Best forHomogeneous backends
LimitationIgnores load/latency

Example: Round-robin upstream

upstream backend {
  server svc-1.internal:8080;
  server svc-2.internal:8080;
  server svc-3.internal:8080;
}

2. Using Least Connections Algorithm

PropertyValue
DistributionPick lowest active conns
StatePer-target counter
Best forLong-lived requests
NGINX directiveleast_conn;

3. Using IP Hash Algorithm

Example: IP hash for session affinity

upstream backend {
  ip_hash;
  server svc-1.internal:8080;
  server svc-2.internal:8080;
}
PropertyValue
Hash keyClient IP
StickinessSame IP → same backend
GotchaNAT, mobile users skew

4. Implementing Weighted Load Balancing

TargetWeightShare
large.svc450%
medium.svc225%
small.svc225%

5. Configuring Consistent Hashing

PropertyValue
AlgorithmRing hash (Ketama/Maglev)
Hash inputHeader, cookie, query, path
Re-balance costO(1/N) keys move on change
Best forCache locality, sharding

Example: Consistent hash by user ID (Envoy)

load_balancing_policy:
  policies:
  - typed_extension_config:
      name: envoy.load_balancing_policies.ring_hash
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.load_balancing_policies.ring_hash.v3.RingHash
        minimum_ring_size: 1024
hash_policy:
- header: { header_name: x-user-id }

6. Implementing Sticky Sessions

MethodMechanism
Cookie insertGW adds SERVERID cookie
Cookie prefixModify existing app cookie
App cookieHash app-set cookie
HeaderHash custom header
Warning: Sticky sessions break horizontal scaling and graceful drain. Prefer stateless sessions (JWT, Redis).

7. Setting Load Balancing Weights

ScenarioWeight Setup
Heterogeneous instances2x CPU → 2x weight
CanaryStable=99, canary=1
DrainTarget weight → 0
Cost balancingSpot=70, on-demand=30

8. Setting Up Active Health Checks

Example: Envoy active health check

health_checks:
- timeout: 1s
  interval: 5s
  unhealthy_threshold: 3
  healthy_threshold: 2
  http_health_check:
    path: /healthz
    expected_statuses: [{ start: 200, end: 299 }]

9. Configuring Passive Health Checks

TriggerAction
5 consecutive 5xxEject 30s
Connection resetEject 10s
TimeoutEject 30s
Local origin failureEject + circuit break

10. Configuring Failover Behavior

Primary OK    →  Route to primary
Primary FAIL  →  Retry on primary (n=2)
Still FAIL    →  Switch to secondary pool
Secondary OK  →  Stay until primary healthy 30s
      
StrategyUse
Active-activeBoth serve traffic
Active-passiveStandby only on failure
Priority groupsTier 1 → tier 2 fallback