A function platform can increase active invocations as demand rises, but downstream systems retain finite connection, write, and rate budgets. A concurrency ceiling protects a dependency only when it is derived from measured per-invocation demand and leaves capacity for other clients. Synchronous requests may be rejected or throttled at the ceiling; queued events may accumulate age. Both outcomes need an explicit user and retry policy. Increasing the ceiling without load testing merely transfers overload to the next boundary.
Serverless concurrency: cap the function before the database fails
Operational decision
A claims-status function opens one database connection per active invocation. The database permits 120 service connections, of which 35 are reserved for other workloads and 15 for administration and failover. The remaining 70 form an upper bound before accounting for connection bursts and transaction duration. Start a load test below that bound, measure connection occupancy and p99 latency, and tighten the function ceiling if the database degrades earlier. For queue-triggered work, limit consumer parallelism and watch oldest-message age; for HTTP, return a retryable response with a bounded client policy rather than accepting unbounded backlog. A shared pool or proxy can reduce connection churn but does not create extra database write capacity.
Database connection budget: 120
Other services: 35
Administration and failover: 15
Theoretical function maximum: 70
Release gate: lower measured ceiling if p99 or lock wait rises
Queue signal: oldest pending event ageCost and verification
At C concurrent invocations with one connection each, demand is O(C); with K connections per invocation it can reach O(C times K). Restricting concurrency can protect the database while raising queue delay or HTTP rejection. Track all three: function throttles, database saturation, and user completion time. Reserve a separate recovery path so a stuck batch cannot consume every execution slot.
Common Mistakes
- Do not treat automatic function scaling as downstream capacity.
- Do not set the ceiling equal to the database maximum.
- Do not hide queue age after lowering consumer concurrency.
Connected lessons
- DevOps: delivery, infrastructure, and reliable operations
- Database pool pressure: bound waiting before the database collapses
- Overload shedding: refuse excess work before latency collapses
- Queue-age scaling: target completion time, not only queue length
