Why it matters

Without bulkheads, a hanging downstream can consume all threads in the calling service, taking down every code path. With bulkheads, only the affected dependency's callers hang; the rest of the service works.

Advertisement

The architecture

Thread pool isolation: dedicated pool per downstream dependency. If service A hangs, only its pool fills; other services still get threads.

Connection pool isolation: dedicated DB connections per code path or tenant. Runaway query on one tenant doesn't consume all connections.

Bulkhead levelsThread poolper dependencyConnection poolper code pathProcess isolationper critical serviceMultiple bulkhead layers: threads, connections, processes; each isolates a class of failures
Isolation levels.
Advertisement

How it works end to end

Process isolation: run critical services in separate processes. A crash in one doesn't take down others. Container per service enforces this.

Semaphore-based bulkhead: lightweight version limits concurrent access to a resource without dedicated thread pool.

Bulkhead + circuit breaker: bulkhead contains the failure; breaker stops sending traffic to the failed dependency.