Skip to content

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