Compensazione nelle saga
Il pattern per annullare una transazione distribuita in più passaggi (una «saga») eseguendo azioni compensative esplicite per ogni passo già completato, invece di un rollback del database. Il modo usuale per mantenere coerenti i dati tra microservizi senza transazioni distribuite.
Il problema: un'operazione che attraversa più servizi (prenotare volo, hotel e auto a noleggio) non può usare una singola transazione di database o il 2PC, perché ogni servizio ha il proprio database e il 2PC scala male. Una saga la suddivide in transazioni locali, una per servizio; se un passo successivo fallisce, vengono eseguite transazioni compensative che «annullano» le precedenti (si cancella l'hotel, si rimborsa il volo). Attenzione: la compensazione è semantica, non un rollback esatto: il denaro viene rimborsato, il tempo non torna indietro. Due stili: coreografia (i servizi reagiscono agli eventi degli altri) oppure orchestrazione (un coordinatore centrale guida il processo). Le compensazioni devono essere idempotenti. Una pietra angolare dell'architettura a microservizi.