Skip to content

ADR_00009: Žádné sagy – integrace v rámci domény

Status: Proposed / Accepted
Date: 2025-12-29


Context

V některých systémech se pro orchestraci mezi mikroservisami používají SAGA (choreografie nebo orchestrace více transakcí).
Sagy:

  • mohou být složité a těžko testovatelné,
  • obcházejí explicitní ownership agregátů,
  • zvyšují komplexitu při řešení rollbacků a retry,
  • často vznikají kvůli rozděleným mikroservisám.

V našem e‑shopu:

  • nemáme mikroservisy pro každou doménu, ale monorepa s jasně definovanými core doménami,
  • chceme udržet všechny transakce a logiku v rámci domény a agregátů,
  • minimalizovat složitost orchestrace.

Decision

  • Sagy nebudou použity.
  • Integrace probíhá přímo mezi agregáty a doménami přes eventy (Inbox/Outbox + Kafka).
  • Všechny procesy, které vyžadují konzistenci, jsou řešeny v rámci domény (authoritative state).
  • Orchestrace přes saga engine není potřeba, protože domény nejsou distribuované jako samostatné mikroservisy.

Povolený postup

  1. Agregát provede stavový přechod.
  2. Event je publikován přes Kafka / outbox.
  3. Ostatní domény aktualizují read modely nebo reagují event-driven.
  4. Žádné cross-service orchestrace sagy, všechny business pravidla jsou uvnitř domény.

Zakázané praktiky

  • Používání sag pro orchestraci mezi doménami
  • Distribuované transakce přes saga orchestration engine
  • Obcházení agregátů a vlastnictví dat

Consequences

Pozitiva

  • Jednodušší architektura bez složitých orchestrací
  • Jasné ownership agregátů
  • Snadnější testování a debug
  • Zachování DDD principů

Negativa

  • Některé cross-domain scénáře vyžadují pečlivé plánování event-driven workflow
  • Eventual consistency musí být akceptována tam, kde je vhodná

Rationale

Rozhodnutí Důvod
Žádné sagy Snižuje komplexitu orchestrace a rollbacků
Monorepo + core domény Umožňuje udržet všechny transakce uvnitř domény
Event-driven integrace Podporuje CQRS a eventual consistency bez sag