Log je pravda, projekce je odvozená
Rejstřík publikuje neměnný, číselně uspořádaný proud akcí. Systém, který si z něj udělá jen aktuální tabulku, zahodí jedinou vlastnost, kterou zdroj dává zadarmo — možnost vrátit se k tomu, co bylo řečeno, a přečíst to znovu jinak.
- Replika
- append-only log akcí, idempotentní podle ID akce
- Projekce
- odvozená, kdykoli znovu postavitelná, nikdy ručně nepatchovaná
- Oprava
- oprav projektor, zvyš jeho verzi, přehraj z logu
- Stav
- archiv feedu existuje; replika a projektor v databázi jsou plánované (fáze 1)
Co je nedotknutelné
Replika a úložiště dokumentů. Všechno ostatní je odvozené a znovu postavitelné, a zálohovací politika neplyne z ničeho jiného než z téhle věty.
Proč to není jen otázka elegance
Interpretace zdroje se bude měnit — u dokumentů, které jsou převážně skeny, se mění pokaždé, když se najde nový tvar formuláře. Kdyby oprava interpretace znamenala znovu stáhnout rejstřík, narazila by na strop 3000 požadavků denně a tým by ji odložil.
Odložená oprava je ve skutečnosti neprovedená oprava. Přehrání logu z toho dělá rutinní operaci, která nikoho nic nestojí a nikoho o nic neprosí.
Co se tím nezískává
Event sourcing neřeší, jestli je interpretace správná. Řeší jen to, že se dá opravit. Kvalita dat pořád stojí na extrakci, prahu spolehlivosti a lidské kontrole.
Kde to v repozitáři žije
docs/ARCHITECTURE.md— pět definujících rozhodnutí a chování při selhánídocs/INGESTION.md— poll smyčka, checkpoint, backfill versus živý provoz, přehrávánídocs/runbooks/replay.md— runbook přehrání projekce
Souvisí
Event sourcing, protože zdroj je event stream
Systém je konzumentem oficiálního proudu událostí. Z něj staví lokální append-only repliku a z ní přehrává projekci aktuálního stavu. Oprava chyby v interpretaci znamená přehrát log, ne znovu stahovat rejstřík.
Detail
Výsledky extrakce jsou content-addressed a cachované
Dokument je identifikovaný SHA-256 svých bajtů a výsledek extrakce je uložený proti tomuto hashi. Přehrání projekce znovu použije cache a nespustí OCR ani LLM. Bez toho by každá oprava projektoru stála celý backfill znovu.
Detail