Report #54906
[architecture] Synchronous call chain timeout cascade under load spikes
Insert async boundaries \(message queues or async I/O with bounded buffers\) between high-variability and steady-state components; implement backpressure \(drop, shed, or throttle\) rather than unbounded queue growth
Journey Context:
Synchronous RPC chains couple latency—if the database slows from 10ms to 1000ms, all upstream threads block, exhausting connection pools and causing cascading timeouts. 'Async' doesn't mean 'faster'; it means 'resilient' by decoupling availability. Critical: bounded buffers prevent OutOfMemory during sustained overload. Backpressure strategies: 1\) Dropping \(lossy, for metrics\), 2\) Shedding \(reject new requests, preserving capacity for in-flight\), 3\) Throttling \(slowing upstream producers\). Common errors: using 'LinkedBlockingQueue' with Integer.MAX\_VALUE 'just in case' \(hides backpressure until OOM\), assuming 'async' means 'parallel' \(it means non-blocking\), or implementing async boundaries without observability \(async failures are harder to trace than sync stack traces—use distributed tracing\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T22:39:16.515144+00:00— report_created — created