Sagas are coordinated in two ways:
Through Orchestration - a target service (can be a standalone or a participant in the transaction) is designated as the coordinator of the steps/state to complete a set distributed transaction by invoking/emitting events to other services either asynchronously or synchronously.
Through Choreography - each service invokes/emits an event that prompts the next service in line to complete its transaction either asynchronously or synchronously.
Distributed transaction matrix | ||
---|---|---|
Communication | Consistency | Coordination |
Synchronous | Atomic | Orchestration |
Synchronous | Atomic | Choreography |
Synchronous | Eventual | Orchestration |
Synchronous | Eventual | Choreography |
Asynchronous | Atomic | Orchestration |
Asynchronous | Atomic | Choreography |
Asynchronous | Eventual | Orchestration |
Asynchronous | Eventual | Choreography |
We will explore each transaction implementation in the following sections identifying the pros and cons of each approach.