You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Scatter-Gather design pattern is a messaging and integration pattern used to parallelize task execution. It broadcasts (scatters) a single request to multiple recipients or worker services concurrently, and then aggregates (gathers) their responses back into a single response. This significantly reduces overall response time when fetching data from multiple independent sources.
Detailed Explanation
In enterprise architectures, a client request often requires gathering information from multiple downstream services or running multiple independent calculations. Running these calls sequentially can lead to high latency.
The Scatter-Gather pattern addresses this by:
Scatter: Spawning multiple parallel threads or asynchronous tasks (workers) to call each downstream service or execute task partitions.
Gather: Waiting for all tasks to finish (or timing out if some are slow), collecting the results, and passing them to an aggregator.
Aggregate: Merging individual responses into a unified result format returned to the client.
Real-World Example
Consider a travel booking aggregator (like Kayak or Expedia). When a user searches for a flight, the portal scatters the query to multiple airlines' API servers simultaneously. It gathers the prices, sorts them, and displays the complete list to the user.
Conceptual Architecture
Here is a conceptual design for the Scatter-Gather pattern:
classDiagram
direction TB
class TaskSupplier {
<<interface>>
+execute() String
}
class AirlineService {
-String airlineName
-double basePrice
+execute() String
}
class ScatterGatherExecutor {
-ExecutorService executor
+scatterGather(List~TaskSupplier~ tasks, long timeoutMs) List~String~
}
class Aggregator {
+aggregate(List~String~ results) String
}
TaskSupplier <|.. AirlineService
ScatterGatherExecutor --> TaskSupplier : scatters tasks
ScatterGatherExecutor .. Aggregator : passes results to
Name of the Design Pattern
Scatter-Gather Pattern
Category
Concurrency / Integration Patterns
Intent
The Scatter-Gather design pattern is a messaging and integration pattern used to parallelize task execution. It broadcasts (scatters) a single request to multiple recipients or worker services concurrently, and then aggregates (gathers) their responses back into a single response. This significantly reduces overall response time when fetching data from multiple independent sources.
Detailed Explanation
In enterprise architectures, a client request often requires gathering information from multiple downstream services or running multiple independent calculations. Running these calls sequentially can lead to high latency.
The Scatter-Gather pattern addresses this by:
Real-World Example
Consider a travel booking aggregator (like Kayak or Expedia). When a user searches for a flight, the portal scatters the query to multiple airlines' API servers simultaneously. It gathers the prices, sorts them, and displays the complete list to the user.
Conceptual Architecture
Here is a conceptual design for the Scatter-Gather pattern:
classDiagram direction TB class TaskSupplier { <<interface>> +execute() String } class AirlineService { -String airlineName -double basePrice +execute() String } class ScatterGatherExecutor { -ExecutorService executor +scatterGather(List~TaskSupplier~ tasks, long timeoutMs) List~String~ } class Aggregator { +aggregate(List~String~ results) String } TaskSupplier <|.. AirlineService ScatterGatherExecutor --> TaskSupplier : scatters tasks ScatterGatherExecutor .. Aggregator : passes results to