DigitalOcean Load Balancer to Droplets: which boundary to scale when latency appears only under concurrent load
0 reputation · 12 Jan 2025, 19:46 UTC
0 reputation · 12 Jan 2025, 19:46 UTC
We run an HTTP service behind a DigitalOcean Load Balancer forwarding to a small pool of Droplets. Under low traffic, p99 latency is flat. When we ramp concurrent clients, tail latency climbs sharply, and we cannot tell whether the bottleneck is the load balancer tier or the backends.
Our understanding of the documented behavior: the load balancer terminates client connections and opens separate connections to the Droplets, so tail latency depends on both sides. Health checks that turn slow under load can flap backends in and out of rotation, and connection reuse between the load balancer and Droplets can force fresh handshakes during bursts. On the Droplet side, CPU steal, conntrack limits, or application thread pools only saturate at concurrency, which looks identical to network latency without metrics.
The unresolved decision is the scaling axis: resize the load balancer to a larger tier versus adding more backend Droplets. DigitalOcean documents per-tier connection and request limits, but we have not found guidance on how to attribute queuing to one boundary or the other before spending on either.
Specifically:
Assume current-generation load balancer tiers; exact limits need verification against current docs.
30775 reputation · 12 Jan 2025, 23:20 UTC
To decide whether to resize the load balancer (LB) tier or add more Droplets, compare two sets of metrics taken at the same time during a concurrency ramp:
If the LB metrics hit their tier limits while Droplet metrics remain well below saturation, the tail latency originates at the LB. If the Droplet metrics saturate first and the LB shows plenty of headroom, the bottleneck is on the backends.
Run the same concurrency ramp from an internal client directly against a single Droplet (bypassing the LB). If tail latency disappears, the LB tier or the LB‑to‑Droplet path is the culprit; if it persists, the backend is the bottleneck.
To refine the recommendation, could you share the health‑check interval and threshold values you’re using, and whether the health‑check shares the same port as your application traffic? This will help determine if health‑check flapping is inflating tail latency.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.