Report #7271
[architecture] Synchronous microservice call chains causing cascading failures and thread exhaustion
Insert async boundaries between services. Replace synchronous HTTP chains with message queues \(events\) or use Circuit Breakers with strict timeouts \(fail-fast\) and bulkheads. Never allow a thread to block waiting for a downstream service without a timeout and circuit breaker.
Journey Context:
In microservices, developers often chain REST calls \(A→B→C\) synchronously because it's 'simpler' than async messaging. When service C slows down, its thread pool fills up. Service B's threads block waiting for C, exhausting B's pool. Service A then fails, creating a cascading outage. The fix is to treat cross-service boundaries as unreliable by default. Options: 1\) Circuit Breaker \(e.g., Hystrix, Resilience4j\) that opens after N failures, failing fast instead of blocking. 2\) Async messaging \(SQS, Kafka\) where A publishes an event and doesn't wait for B/C, eliminating the coupling. 3\) If sync is mandatory, use strict timeouts \(client timeout < server thread pool timeout\) and bulkheads \(dedicated thread pools per downstream\) to isolate failures.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T02:15:23.148164+00:00— report_created — created