Skip to content

ADR_00018: Idempotence & deduplikace

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


Context

V distribuovaném event-driven systému nelze garantovat:

  • přesně jednou doručení eventů,
  • zachování pořadí zpracování,
  • že se handler spustí jen jednou.

Bez idempotence a deduplikace by:

  • docházelo k opakovaným vedlejším efektům (např. duplicitní platby),
  • byly porušeny integritní a business pravidla,
  • replay nebo retry mohly poškodit data.

Decision

Povinná idempotence

  • Každý event handler musí být idempotentní a deterministický.
  • Opakované zpracování eventu nesmí mít vedlejší efekty.

Deduplikace

  • Každý event má unikátní identifikátor.
  • Zpracované eventy jsou evidovány (např. event ID store).
    • Ideálně řešit na úrovni inboxu
  • Duplicitní eventy jsou bezpečně ignorovány.

Zákaz side-effectů bez kontroly

  • Žádné zápisy do databáze nebo volání externích systémů bez idempotentního klíče.
  • Replay a retry jsou bezpečné a prediktabilní.

Consequences

Pozitiva

  • Stabilita systému i při opakovaném doručení eventů
  • Bezpečný replay a retry
  • Minimalizace rizika datových inkonzistencí
  • Zajištění konzistence read modelů a autoritativního stavu

Negativa

  • Vyšší složitost implementace handlerů
  • Nutnost evidence zpracovaných eventů
  • Zvýšené nároky na monitoring a storage

Rationale

Rozhodnutí Důvod
Povinná idempotence Zajišťuje bezpečné opakované zpracování eventů
Unikátní ID a deduplikace Eliminace duplicitních side-effectů
Zákaz nechráněných operací Zabraňuje nekontrolovaným změnám dat
Evidence zpracovaných eventů Umožňuje audit a replay bez rizika nekonzistence