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 lecturacommit_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:
- Obtenir el següent lot després del punt de control
- Aplica cada esdeveniment mitjançant els setters de L1
- Actualització del punt de control
- 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:
- Carrega el punt de control des del disc
- Recuperar esdeveniments des de la posició de control
- Reproduir esdeveniments per reconstruir l’estat
- 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é
- Model d’execució - Com s’integra la reproducció en l’arquitectura
- Salut i Mètriques - Monitorització de la frescor
- HTTP API - Frescor en les respostes de l’API