Lärarguide · Lektion 9 av 10

Snapshots, projection rebuild & sagas

Två performance-/koreografi-mönster: snapshots gör rehydrering snabb, sagor koordinerar över aggregat.

V5 Mån
Vecka / Dag
4 h
Total tid
100 min
Teori
130 min
Workshop

Mål

Agenda

0:00
Recap kö + undo. Vilken är prestandarisken nu? (långa streams)
0:15
Teori: snapshots — cache, inte sanning. Får alltid kastas.
0:45
Teori: projection rebuild — slänga read-tabell, replaya från event 0.
1:15
Teori: sagor — orchestration vs choreography. Compensating reactions.
1:45
Paus 15 min
2:00
Workshop: snapshot + rebuild + saga.
3:45
Varning: undvik sagor om det går. Visa enklare alternativ.
4:00
Slut

Talartips

Snapshot är en cache. Repetera detta tre gånger. Om man inte kan radera sin snapshot-tabell och bygga om alla snapshots från eventström — då gör man fel.
Projection rebuild är en superkraft. Visa det live: DROP TABLE → starta projection → den bygger om sig. Studenter brukar bli imponerade.
Sagor är kraftfulla men svåra. Använd bara när du verkligen behöver koordinera över aggregat. För det mesta räcker två commands från klienten.

Workshop

  1. Skapa dbo.Snapshots-tabell (StreamId, Version, JsonState).
  2. Implementera SqlSnapshotStore.
  3. Modifiera EventSourcedRepository: ladda snapshot → ladda events efter snapshot-version.
  4. Spara snapshot var 100:e event.
  5. Skapa MoneyTransferSaga som lyssnar på TransferRequested → debit → credit → markera klar; rollback på fel.
  6. Testa rebuild: DELETE FROM AccountSummary; UPDATE Checkpoints SET Position = 0; → starta om → verifiera samma resultat.

Snabba

  • Sagans state-machine — modellera med Stateless-biblioteket.
  • Lägg in idle timeout för saga.

Stöd

  • Tillhandahåll snapshot-tabell färdig.
  • Skriv saga-skelett som studenten fyller i.

FAQ

När är man redo för snapshots?
När rehydrering tar >100 ms i hot path eller streams går över 5–10k events.
Process manager vs saga?
Samma sak i praktiken. Termen "saga" kommer från 1987-papperet; "process manager" är Enterprise Integration Patterns-terminologin.
Vad om sagan kraschar mitt i?
Saga-state ska persisteras (egen tabell eller event stream). Vid omstart läses den och fortsätter där den var.
Fallgrop Snapshot-format ändras → gammal snapshot blir inkompatibel. Lösning: versionera, eller släng alla snapshots vid deploy och låt repository bygga om dem.
Hemuppgift Övningar 1–3 lektion 09. TicketHub: implementera saga för "boka biljett + ladda betalkort".
Förberedelse till L10 Slipa Blazor WebAssembly — se till att studenter har .NET 10-templates installerade. Diff mot Server-rendering (Blazor United) — vi använder WASM.

← L8 L10 →