Architektura Expert
Saga Pattern — distribuované transakce bez 2PC¶
SagaTransactionsMicroservices 3 min čtení
Implementace Saga patternu pro konzistenci dat napříč mikroservisami. Choreografie vs orchestrace.
Problém distribuovaných transakcí¶
V monolitu stačí DB transakce. V mikroservisách má každá služba vlastní DB — klasické transakce nefungují. Saga je sekvence lokálních transakcí s kompenzačními akcemi.
Choreografie vs Orchestrace¶
Choreografie: Služby komunikují přes events, žádný centrální koordinátor.
Orchestrace: Centrální Saga orchestrátor řídí sekvenci kroků.
class CreateOrderSaga {
steps = [
{ action: 'order.create', compensate: 'order.cancel' },
{ action: 'payment.process', compensate: 'payment.refund' },
{ action: 'inventory.reserve', compensate: 'inventory.release' },
{ action: 'order.confirm', compensate: null }
];
async execute(data) {
const completed = [];
for (const step of this.steps) {
try {
await this.invoke(step.action, data);
completed.push(step);
} catch (error) {
for (const s of completed.reverse())
if (s.compensate) await this.invoke(s.compensate, data);
throw error;
}
}
}
}
Kdy co použít¶
- Choreografie — jednodušší sagy (2-4 kroky)
- Orchestrace — složitější sagy (5+ kroků)
- Nástroje: Temporal, Camunda, AWS Step Functions
Shrnutí¶
Saga pattern vyžaduje pečlivý návrh kompenzačních akcí a idempotentních operací. Pro komplexní workflows doporučujeme orchestraci s Temporal.
Potřebujete pomoct s implementací?¶
Náš tým má zkušenosti s návrhem a implementací moderních architektur. Rádi vám pomůžeme.