ADR_00008: Eventual consistency vs. authoritative state
Status: Proposed / Accepted
Date: 2025-12-29
Context
V našem DDD e‑shopu existují domény, kde:
- některé operace vyžadují okamžitou konzistenci (např. Checkout, Payment..),
- jiné domény mohou pracovat s eventual consistency (např. Catalog - Pricing read models + marketingové projekce).
Potřebujeme jasně definovat, kdy používáme authoritative state a kdy eventual consistency.
Decision
-
Event-driven, eventual consistency:
- Většina read modelů a interních služeb se naplňuje asynchronně přes Kafka eventy a snapshoty.
- Změny v doméně jsou publikovány jako eventy a ostatní domény si vytváří vlastní read modely.
- Příkladem jsou: Catalog, Pricing, Marketing projections.
-
Authoritative state (synchronous / gRPC):
- Pro operace, kde je nutná okamžitá konzistence, doména poskytuje autoritatívní endpoint přes gRPC.
- Příkladem jsou: Checkout, Payment, Stock reservation.
- Tyto operace nevyužívají pouze eventy, ale jsou autoritativní zdrojem pravdy.
-
Hybridní přístup:
- V doméně může existovat kombinace: snapshoty/eventy pro read modely + authoritative endpoint pro kritické transakce.
- Vždy je jasně definováno, který typ konzistence je použit pro danou operaci.
Consequences
Pozitiva
- Domény s vysokou škálovatelností mohou používat eventual consistency
- Kritické operace jsou spolehlivé a autoritativní
- Jasné oddělení read/write modelů podle potřeby
- Podpora CQRS patternu a event-driven architektury
Negativa
- Nutnost jasně komunikovat, které operace jsou authoritative a které eventual
- Zvýšená složitost implementace read modelů a synchronizace
- Eventual consistency může vést ke krátkodobé nekonzistenci mezi doménami
Rationale
| Rozhodnutí | Důvod |
|---|---|
| Eventual consistency | Škálovatelné read modely, snapshoty, asynchronní aktualizace |
| Authoritative state | Okamžitá konzistence tam, kde je kritická (Checkout, Payment, Stock) |
| Hybridní přístup | Kombinace pro flexibilitu a bezpečné transakce |