Mirosław Pragłowski / @mpraglowski
Saga helps to deal with eventual consistency, uncertainty and constraint prohibiting transactions going outside of the Aggregate Root (or entity in general). Sagas are aware of the passing time and can implement functionality like timeouts.
Saga is a message handler running on the server, that helps us to implement long-running business transactions. Sagas can subscribe to events and receive direct commands. They send commands. Usually implemented as finite state machine.
Sagas listen to events and dispatch commands while aggregates receive commands and publish events.
Introduced in paper written by Hector Garcia-Molina and Kenneth Salem in 1987 (http://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf).
saga: shipment data (correlation id: order id) OrderCreated => CustomerBilled => ShipmentReady => => ShipOrder CancelOrder => => OrderShipped / RefundOrder