Skip to content

ADR_00010: Core domény – choreografie jako integrační vzor

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


Context

V našem e-shopu používáme DDD s Core, Supporting, Generic doménami a Channely.

Domény spolu musí komunikovat:

  • mezi sebou navzájem (machine-to-machine),
  • s cílem udržet eventual consistency,
  • bez centrálního orchestrátora, aby byla zachována nezávislost domén.

Cílem je mít decoupled, škálovatelnou a odolnou architekturu, kde každá doména reaguje na eventy a vydává vlastní eventy.


Decision

Pro core domény je zavedena choreografie jako hlavní integrační vzor:

  • Každá doména vydává eventy při změně svého stavu.
  • Ostatní domény poslouchají relevantní eventy a reagují podle své vlastní logiky.
  • Žádný centrální orchestrátor neřídí procesy mezi doménami.
  • Synchronní volání (REST/gRPC) jsou používány pouze pro kritické autoritativní dotazy (např. checkout).

Pravidla implementace:

  1. Eventy jsou publikovány přes outbox pattern a doručovány spolehlivě přes Kafka.
  2. Domény implementují inbox workery pro zpracování příchozích eventů.
  3. Zpracování eventů je idempotentní.
  4. Eventy mohou být zachyceny pro audit a monitoring.
  5. Event-driven komunikace je primární způsob integrace; synchronní volání jen výjimečně.

Consequences

Pozitiva

  • Domény jsou nezávislé a snadno rozšiřitelné.
  • Škálovatelnost: služby mohou být deployovány nezávisle.
  • Podpora eventual consistency a CQRS stylu.
  • Eliminace centrálního bodu selhání.
  • Jasný audit a trace přes eventy.

Negativa / náklady

  • Obtížnější sledování end-to-end procesů.
  • Potřeba monitoringu a observability eventů.
  • Nutnost retry, DLQ a idempotence.
  • Možná složitější ladění chyb a debugging.

Rationale

Rozhodnutí Odůvodnění
Choreografie jako hlavní integrační vzor Umožňuje loose coupling mezi core doménami a snadné škálování
Event-driven architektura Podpora CQRS a eventual consistency
Inbox / Outbox pattern Zajištění spolehlivého doručení a idempotence
Synchronní volání jen výjimečně Kritické autoritativní dotazy zachovávají konzistenci, ostatní logika zůstává decoupled

Considered Alternatives

  • Orchestrace (centralizovaný orchestrátor)
    • Centrální služba řídí tok procesů mezi doménami, posílá příkazy a čeká na odpovědi.
    • Eventy jsou doplňkem pro audit nebo sledování stavu, nikoli primární integrační kanál.
    • Výhody:
      • Snazší sledování end-to-end procesů.
      • Jednodušší zajištění pořadí kroků a transakční logiky napříč doménami.
    • Nevýhody:
      • Centrální bod selhání.
      • Závislost domén na orchestrátoru → méně decoupled.
      • Horší škálovatelnost, orchestrátor může být bottleneck při vysokém zatížení.