Přeskočit na obsah

Event sourcing, protože zdroj je event stream

WS ISIR publikuje číselně uspořádané neměnné akce. Cokoli jiného než uložit je doslova a přehrávat zahazuje jedinou vlastnost, kterou zdroj dává zadarmo. Tahle stránka popisuje mechaniku toho rozhodnutí; kód pro repliku a projektor zatím neexistuje a je na roadmapě jako fáze 1.

Zdroj
neměnné akce s pořadovým ID, publikované od roku 2008
Replika
append-only, idempotentní podle ID akce, nikdy se needituje
Projekce
odvozená, kdykoli znovu postavitelná z logu
Oprava
oprav projektor, zvyš jeho verzi, přehraj — nikdy ruční UPDATE
Stav
plánováno (fáze 1: replika a checkpoint, projekce)

Dvě vlastnosti, na kterých stojí celý návrh

Pořadová ID dělají z inkrementální synchronizace triviální úlohu: stačí se zeptat na všechno za ID N. Neměnnost dělá bezpečným přehrávání — nic, co už bylo staženo, se zpětně nezmění, takže lokální kopii lze bez rizika považovat za append-only.

Kdyby si systém z proudu udělal jen aktuální tabulku, obě vlastnosti by zahodil a každá oprava interpretace by znamenala znovu obtěžovat veřejnou službu v rámci limitu 3000 požadavků denně.

Checkpoint je jediné pohyblivé místo

  • Zápis akcí a posun checkpointu proběhnou v jedné transakci: pád mezi nimi znamená znovunačtení dávky, ne tichou ztrátu dat.
  • Zápis je idempotentní podle ID akce, takže opakovaná dávka je no-op, ne duplikát.
  • Chyba parsování ani chybový stav zdroje checkpointem nepohnou — přeskočená dávka je neviditelná ztráta dat.
  • Checkpoint se nikdy nevrací zpět, s výjimkou výslovného operátorského zásahu podle runbooku přehrání.

Proč se projekce nikdy nepatchuje ručně

Ruční UPDATE opraví jeden řádek a zároveň nenávratně rozpojí projekci od logu. Od té chvíle už přehrání nedá stejný výsledek jako to, co je v databázi, a projekce přestane být odvozená — stane se druhým zdrojem pravdy, který nikdo neumí zrekonstruovat.

Proto zní oprava vždycky stejně: oprav projektor, zvyš jeho verzi, přehraj z logu. Replika se přitom nedotkne.

# Oprava je přehrání, ne ruční UPDATE. Replika se nikdy needituje. Chyba v interpretaci se opraví v projektoru, zvýší se jeho verze a projekce se přehraje z logu; extrakce se nevolá znovu, protože je v cache.

Barva uzlu je stav položky na roadmapě: Rozpracováno

Co event sourcing neřeší

Nezaručuje, že je interpretace správná — jen že jde opravit. Kvalita dat pořád stojí na extrakci ze skenů, prahu spolehlivosti a lidské kontrole. A levné přehrávání je podmíněné tím, že se výsledky extrakce cachují; bez cache by každá oprava stála celý backfill znovu.

Kde to v repozitáři žije

  • docs/ARCHITECTURE.md — pět definujících rozhodnutí, komponenty a úložiště
  • docs/INGESTION.md — poll smyčka, invarianty příjmu, backfill versus živý provoz, přehrávání
  • .claude/adr/0003-event-sourced-register-replica.md — rozhodnutí o append-only replice a odvozené projekci

Souvisí

Zpět na sekci Architektura