Have each component of the system to participate in the decision-making process about the workflow of a business transaction, instead of replying on a central point of control.
When to use this pattern?
If you expect to update, remove, or add new services frequently.
If you’re experiencing a performance bottlenecks in the central orchestrator(in case of orchestrator pattern)
Considerations
Decentralizing the orchestrator might cause issues while managing the workflow
If one service fails to complete a business operation, it can be difficult to recover from that failure.
It’s simple to implement a workflow when you want to process independent business operations in parallel.
Choreography pattern becomes a challenge if the number of services grow rapidly.
Orchestrator pattern manages the workflow and it can become a single point of failure, Choreography role is distributed between all services and resiliency becomes less robust.
Each Service isn’t ONLY responsible for the resiliency of its operation, but also the workflow