Sticky Sessions

Sticky sessions, also known as session affinity or session persistence, is a load balancing technique that ensures subsequent requests from the same client are routed to the same backend server for the duration of a session. This maintains session state (e.g., user login, shopping cart) on one server, avoiding the need for shared storage. Introduced in early web load balancers (e.g., 1990s), sticky sessions remain essential for stateful apps in microservices, despite alternatives like centralized sessions.

Fundamental Concepts

1. What is a Session?

2. Load Balancing Basics

3. Affinity Key

4. Load Balancer Role

How Sticky Sessions Work (Step-by-Step)

  1. Initial Request: Client hits balancer (e.g., round-robin selects Server A).
  2. Server Assignment: Balancer notes affinity (e.g., sets cookie server_id=A).
  3. Session Start: Server A creates session data (e.g., stores cart in memory).
  4. Subsequent Requests: Client resends cookie/key; balancer routes back to Server A.
  5. Session End: Timeout, explicit logout, or cookie expiration → reassign.

Diagram:

Client ──(Request + No Cookie)──► Balancer ──► Server A (Assigns Cookie)
Client ──(Request + Cookie A)───► Balancer ──► Server A (Session Data)
Client ──(Request + Cookie A)───► Balancer ──► Server B? No → Server A

Implementation Examples

NGINX (Cookie-Based)

upstream backend {
    server srv1.example.com;
    server srv2.example.com;
    sticky cookie srv_id expires=1h domain=.example.com path=/;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

HAProxy (IP Hash)

backend webservers
    balance source  # IP hash
    server srv1 192.168.1.10:80 check
    server srv2 192.168.1.11:80 check

Kubernetes Service (Session Affinity)

apiVersion: v1
kind: Service
spec:
  sessionAffinity: ClientIP  # IP-based
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800  # 3 hours
  ports:
  - port: 80
    targetPort: 8080

Pros and Cons

Pros Cons
Simplicity: No shared storage needed. Uneven Load: Some servers overloaded if sticky.
Performance: Low latency (no session lookup). Failover Issues: Session lost on server failure.
Compatibility: Works with legacy apps. Scalability Limit: Can't freely add/remove servers mid-session.

Alternatives to Sticky Sessions

Best Practices: - Use cookies over IP (handles NAT). - Set short timeouts (e.g., 30min) for security. - Monitor Affinity: Check load distribution; fallback to shared if uneven. - Graceful Failover: Use session replication or sticky with replication.