Frescor i Repetició

La frescor descriu com d’actuals són les projeccions del daemon de lectura en relació amb el registre de confirmacions. La reproducció és el mecanisme que manté les projeccions sincronitzades.

Problema que resol aquest concepte

En sistemes basats en esdeveniments, les escriptures i les lectures estan separades:

  • El daemon d’escriptura compromet esdeveniments immediatament
  • El daemon de lectura ha de processar aquests esdeveniments per actualitzar la seva vista

Això crea un bretxa de frescor: el temps entre quan un compromís és reconegut i quan apareix en les consultes de lectura. Entendre aquesta bretxa és essencial per:

  • Construint aplicacions que necessiten lectures consistents
  • Diagnosticar l’aparent “desactualització” de dades
  • Ajustament del rendiment del sistema

Idees principals

Registre de Compromisos

El registre de commits és la seqüència duradora de lots d’esdeveniments:

  • Només afegir: Nous lots s’afegeixen al final
  • Immutable: Un cop escrits, els lots no canvien
  • Sequenciat: Cada lot té un número de seqüència monòton

El daemon d’escriptura afegeix al registre; el daemon de lectura el segueix.

Projeccions

Les projeccions són vistes en memòria de l’estat:

  • Construït aplicant esdeveniments del registre de commits
  • Optimitzat per al rendiment de les consultes
  • Publicat atòmicament mitjançant intercanvi de snapshots

Les projeccions són dades derivades. Si es perden, es poden reconstruir a partir del registre de commits.

Punts de control

Els punts de control registren el progrés a través del registre de compromisos:

  • Escriure daemon: Fa un seguiment de la darrera seqüència compromesa
  • Llegir daemon: Fa seguiment de la darrera seqüència aplicada

Els punts de control permeten:

  • Inici ràpid (reanudar des del punt de control, no des del principi)
  • Recuperació de fallades (reproducció des del punt de control)
  • Càlcul de frescor (comparar punts de control)

Metadades de Frescor

Les respostes llegides inclouen informació de frescor:

{
  "freshness": {
    "checkpoint_seq": 42,
    "commit_log_seq": 45
  }
}
  • checkpoint_seq: La seqüència que ha processat el daemon de lectura
  • commit_log_seq: La darrera seqüència al registre de commits

La diferència és el retard: quants commits encara no s’han aplicat.

Procés de Repetició

Quan el daemon de lectura segueix el registre de compromisos:

  1. Obtenir el següent lot després del punt de control
  2. Aplica cada esdeveniment mitjançant els setters de L1
  3. Actualització del punt de control
  4. Publicar nova instantània

Els esdeveniments són idempotents: aplicar el mateix esdeveniment dues vegades produeix el mateix estat. Això fa que la reproducció sigui segura per tornar a intentar.

Flux de Recuperació

Després d’un accident:

  1. Carrega el punt de control des del disc
  2. Recuperar esdeveniments des de la posició de control
  3. Reproduir esdeveniments per reconstruir l’estat
  4. Resumeu el bucle de cua normal

A causa que els esdeveniments porten un estat posterior, la reproducció no necessita tornar a executar la lògica empresarial. Simplement estableix els valors finals.

Com s’integra al sistema

Escriure Ruta

Client → Write Daemon → Commit Log

              [checkpoint updated]

El daemon d’escriptura actualitza el seu punt de control després d’una persistència exitosa.

Llegir Ruta

Commit Log → Read Daemon → Projections → Client

[checkpoint updated after apply]

El daemon de lectura publica instantànies abans d’actualitzar el seu punt de control. Això assegura:

  • Les consultes sempre veuen un estat coherent
  • Les caigudes no perden treball aplicat però no controlat

Informes de Frescor

El punt d’endpoint de salut informa de retard:

{
  "commit_log": {
    "end_seq": 100,
    "checkpoint_seq": 98,
    "lag": 2
  }
}

Monitoritza això per detectar:

  • Funcionament normal (retard proper a 0)
  • Augment temporal (pulsos de retard que després es recuperen)
  • Problemes sistemàtics (el retard creix contínuament)

Invariants i garanties clau

Consistència eventual

Les projeccions reflectiran eventualment tots els esdeveniments compromesos:

  • El daemon de lectura segueix contínuament el registre
  • El retard pot augmentar durant els pics però es recupera
  • Cap esdeveniment compromès és permanentment invisible

Publicar-Abans-Del-Punt-De-Control

Les instantànies es publiquen abans que els punts de control s’actualitzin:

  • Les consultes veuen dades que es garanteix que s’apliquen
  • Els bloquejos no fan que les dades “desapareguin”
  • Reproduccions de recuperació des del darrer punt segur

Reproducció Determinista

La reproducció produeix un estat idèntic:

  • Els esdeveniments porten valors post-estat
  • No hi ha lògica empresarial durant la reproducció
  • Mateixos esdeveniments → mateix estat

Seguretat del Punt de Control

Els punts de control es persisteixen de manera atòmica:

  • No s’escriuen punts de control parcials
  • La recuperació sempre troba un punt de control vàlid
  • El progrés mai es perd en els reinicis

Veure també