Část 13 z 16 · Den 2 · replay, snapshot

Chybný pohled nad správnou historií

Problém a zkušenost

Pohled je špatně a potřebujeme nový

Souhrn počítá chybně. Nebo se zítra někdo zeptá na něco, co dnešní pohled neumí.

Chyba v kódu

  1. Projekce v1sazba se počítá jako příjem
  2. Souhrnzměn příjmu: 3

Nová otázka

  1. „Kolikrát se měnila sazba?“
  2. Pohled na to nemáme

Zkušenost z praxeKdy jste museli opravit report zpětně a báli se, co všechno se při tom stane?

TakeawayKdyž je chyba v pohledu, nemusíme sahat na historii.

Více k tématu

Co to znamená

Projekce je čtecí model odvozený z událostí. Ukládá se zvlášť a drží pozici posledně zpracované události.

Proč to používáme

Chyba v pohledu nezpůsobí ztrátu dat. Pohled lze smazat a postavit znovu novým kódem.

Kdy to dává smysl

Reporty, souhrny, dashboardy, obrazovky, které potřebují jiný tvar než zdrojová data.

Kde se to láme

  • Pozice zpracování se neukládá a po restartu se začíná od nuly.
  • Handler projekce není idempotentní.

Představme si

Souhrn kalkulace ukazuje tři změny příjmu, přestože poradce měnil příjem dvakrát a jednou sazbu.

Opravit pohled nemusí znamenat sáhnout do minulosti.

Princip, aplikace a cvičení

Replay, rebuild a snapshot

Pohled postavíme znovu z historie. Při tom nesmíme znovu poslat e-mail. Snapshot zkrátí načtení, ale nenahradí historii.

Replay

  1. Události
  2. Rebuildrežim bez účinků
  3. Projekce v2opraveno
  4. Nic neodešlo

Snapshot

  1. Snapshot v250
  2. Události 251…300přehráno 50×
  3. Stav v300

Trade-offReplay stojí čas a běží vedle provozu. Chybnou historii neopravuje přehrání, ale opravná událost. Snapshot je cache, ne zdroj pravdy.

TakeawayPřestavba pohledu a provádění skutečných operací musí zůstat oddělené.

Více k tématu

Co to znamená

Rebuild smaže projekci a přehraje události novým kódem. Handlery s vedlejšími účinky se při něm nevolají. Snapshot uloží stav v dané verzi a načtení přehraje jen novější události.

Proč to používáme

Oprava pohledu je rutina. Nesmí z ní vzniknout další dopis nebo platba.

Kdy to dává smysl

U každé projekce, jejíž handler může něco odeslat. Snapshot až tehdy, když dlouhé streamy opravdu měříme.

Kde se to láme

  • Zakomentovaný kód místo příznaku.
  • Starý snapshot po změně kódu agregátu.
  • Mazání událostí po snapshotu.

Představme si

Po opravě projekce v2 přehrajeme historii. Klient e-mail o dokončení výpočtu nedostane podruhé.

Zkrátit načítání neznamená zapomenout a opravit pohled neznamená opakovat minulost.

Školení pro váš tým

Chcete školení pro svůj tým?

Školení vedeme na vašem kódu a vašem doménovém problému. Domluvíme rozsah, termín a formu.

Probrat školení