ADR_00005: Synchronizace dat výhradně pomocí eventů
Status: Proposed / Accepted
Date: 2025-12-28
Context
Systém obsahuje více nezávislých domén:
- Catalog
- Pricing
- Stock
- Orders
- Checkout
- etc
Každá doména:
- vlastní svá data,
- má vlastní databázi,
- má vlastní odpovědnost.
Přímá synchronizace dat (např. SQL replikace, přímé čtení cizích tabulek) vede k:
- silné vazbě mezi doménami,
- nekonzistenci,
- neřízeným závislostem,
- porušení DDD principů.
V případě potřeby validace nedotazovat data, ptát se druhé domény na výsledek. Synchronizace dat v tomto kontextu je myšlena pouze pro eventual consistency scénáře.
Decision
Veškerá synchronizace dat mezi doménami probíhá výhradně pomocí eventů.
Platí následující pravidla:
- žádné sdílené databáze
- žádné přímé čtení cizích tabulek
- žádné synchronní dotazy na data jiné domény
- pouze eventy
- vlastní read-only modely
Povolený způsob komunikace
- Doména provede změnu stavu
- Zapíše event do outboxu
- Event je publikován
- Ostatní domény:
- event přijmou
- uloží do inboxu
- aktualizují vlastní read model
Výjimky
Povoleny jsou pouze:
- dotazy na agregované read modely
- synchronní dotazy bez přenosu vlastnictví dat
- např. ověření stavu
- validace před akcí
Nikdy:
- zápis do cizí databáze
- přímá závislost na schématu jiné domény
Consequences
Pozitiva
- Striktní oddělení domén
- Vysoká škálovatelnost
- Možnost nezávislého vývoje
- Eventual consistency
- Vysoká odolnost systému
Negativa
- Nutnost práce s eventual consistency
- Složitější debug
- Vyšší nároky na observabilitu
Rationale
| Rozhodnutí | Důvod |
|---|---|
| Event-based sync | Decoupling domén |
| Vlastní databáze | Autonomie domény |
| Read modely | Výkon a izolace |
| Zákaz přímého přístupu | Prevence tight coupling |
Considered Alternatives
- Dotazování se ondemand
- I v případě, kdy stačí eventual consistency ze snapshotu zatížit systém voláním dalších služeb a čekáním na jejich odpověď
- Výhody:
- Menší db a event zátěž
- Žádná potřeba mapování
- Nevýhody:
- Časová náročnost operací