IP hash for session persistence in Nginx - Time & Space Complexity
When using IP hash in nginx, we want to see how the work grows as more clients connect.
We ask: How does nginx handle many client IPs to keep sessions sticky?
Analyze the time complexity of the following nginx configuration snippet.
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
This config uses ip_hash to send clients to the same backend server based on their IP address.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Hashing the client IP and mapping it to one server.
- How many times: Once per client request to decide the backend server.
Each new client IP requires hashing and a lookup among a fixed number of servers.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 hash calculations and 10 server selections |
| 100 | 100 hash calculations and 100 server selections |
| 1000 | 1000 hash calculations and 1000 server selections |
Pattern observation: The work grows linearly with the number of client requests.
Time Complexity: O(n)
This means the time to handle requests grows directly with the number of clients.
[X] Wrong: "The ip_hash method checks all servers for each request, so it's slow for many servers."
[OK] Correct: ip_hash uses a quick hash function to pick one server directly, so it does not check each server one by one.
Understanding how nginx uses ip_hash helps you explain how load balancing can be efficient and predictable in real systems.
"What if we added more backend servers dynamically? How would that affect the time complexity of ip_hash?"