The primary root cause was a misconfigured circuit breaker in our payment service. When Stripe's API began returning slow responses and 503s, our circuit breaker required 10 consecutive failures over 30 seconds before opening. During this window, each request held a connection for 8+ seconds (waiting on Stripe timeout), rapidly exhausting our 50-connection pool. Once exhausted, all payment requests failed with 503 regardless of circuit state.
A contributing factor was the recent deployment (v2.4.1) which increased the default Stripe client timeout from 5s to 15s. This extended the connection hold time and accelerated pool exhaustion.