Distributing a request or task to multiple downstream services or components in parallel.
Fan-out patterns improve performance and scalability by breaking a single task into smaller parallel subtasks. This is common in microservices, asynchronous processing, and large-scale data handling.
Use fan-out when a task can be parallelized (e.g., sending notifications, processing user data, querying multiple services) to reduce overall response time or improve throughput.
You need to know
Synchronous vs. Asynchronous Fan-out: Synchronous fan-out waits for all results (e.g., querying multiple services), while asynchronous uses queues or events to trigger parallel tasks without waiting (e.g., sending emails).
Failure handling is crucial: If one of the fanned-out tasks fails, decide whether to retry, fail the entire operation, or continue with partial results.
Can overwhelm downstream services: Too much parallelism without throttling can cause overload; use rate limiting, retries with backoff, or bulkheads.
Popular technologies
Amazon SNS (Simple Notification Service) - Used for asynchronous fan-out via pub/sub.
Apache Kafka - High-throughput event streaming platform for distributing tasks to consumers.
Like posts like this?
Every week, you'll get a new system design concept, broken down like this one.
Free subscribers also get a little bonus:
🎁 The System Design Interview Preparation Cheat Sheet
If you're into visuals, paid subscribers unlock:
→ My Excalidraw system design template – so you have somewhere to start
→ My Excalidraw component library – used in the diagram of this issue
No pressure though. Your support helps me keep writing, and I appreciate it more than you know ❤️