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 |