Arquitectura del Camí de Escritura
Aquest apèndix proporciona una explicació detallada de com flueixen els commits a través del daemon d’escriptura d’Asset Core, des de la sol·licitud HTTP fins a la persistència durable.
Visió general
El camí d’escriptura està dissenyat per a un alt rendiment mentre manté garanties d’ordenació estrictes i semàntica de durabilitat. Combina una entrada àmplia amb una execució en sèrie d’un sol escriptor i durabilitat en múltiples etapes.
Explicació detallada
Etapes del Pipeline
El camí d’escriptura consta de nou etapes:
- Admissió: el controlador HTTP assigna un número de seqüència, adquireix permisos
- Precomprovació: Validació paral·lela (anàlisi, esquema, autenticació, mida, idempotència)
- Reordre Buffer: Assegura un ordre de seqüència estricte
- Escriptor Únic: Adquireix un bloqueig en temps d’execució, executa operacions
- Segellat: Crea un lot d’esdeveniments, registra el registre d’anul·lació
- Afegir Submissió: Envia el lot per afegir a la piscina de treballadors
- Durabilitat: Els treballadors criden a fsync, retornen el resultat
- Finalització: Actualitza l’estat, respon al client
- Controlador/Lector: Registre de Tails, actualitza projeccions
Subsistema d’Ingressos
La capa d’ingressos accepta sol·licituds HTTP i les introdueix al pipeline:
HTTP POST → Sequence Assignment → Precheck Workers → Reorder Buffer
Components clau:
- Contador de seqüències: u64 atòmic per a un ordre estricte
- Reordenar semàfor: Mida del buffer de límits
- Cua de treball: Canal limitat per a la precomprovació de treballadors
Aquest disseny proporciona contrapressió quan el sistema està sobrecarregat.
Precheck Pipeline
Els treballadors de precomprovació executen passos de validació en paral·lel:
- Analitzar: Deserialitzar JSON, calcular el hash canònic
- Esquema: Validar l’estructura de l’operació
- Auth: Comprovar permisos (si està configurat)
- Mida: Fer complir els límits de mida de la sol·licitud
- Idempotència: Comprovar si hi ha compromisos duplicats
Cada pas retorna Continue o ShortCircuit. Els curtcircuits retornen respostes emmagatzemades sense entrar al carril de compromís.
Carrer d’Escriptor Únic
El sol escriptor serialitza totes les mutacions en temps d’execució:
Validated Commit → Lock Runtime → Execute Operations → Seal Batch → Submit Append
Això garanteix:
- No hi ha condicions de competència sobre l’estat
- Ordenació determinista
- Semàntica de desfer neta
El bloqueig de temps d’execució es manté només durant l’execució, no durant l’entrada/sortida.
Durabilitat del Pipeline
Els lots segellats flueixen cap al grup de treball d’apèndix:
Sealed Batch → Append Queue → Worker Thread → Commit Log → fsync → Result
Els treballadors són fils OS (no tasques async) per gestionar I/O bloquejant. Els resultats tornen al sol escriptor per a la finalització.
Flux d’Esdeveniments
Els esdeveniments transporten càrregues híbrides:
- Delta: Què ha canviat (per a l’analítica)
- Post-estat: Valor final (per a la reproducció)
Això permet tant una analítica eficient com una reproducció idempotent.
Notes d’implementació
Topologia del Canal
El sistema utilitza canals mpsc limitats entre etapes:
| Canal | Emissor | Receptor | Límits |
|---|---|---|---|
work_tx | Gestor HTTP | Gestor de precomprovació | queue_capacity |
result_tx | Treballadors | Buffer de reordenació | Limitat |
commit_tx | Buffer de reordenació | Escrivà únic | append_queue_capacity |
append_tx | Escrivà únic | Treballadors d’append | Limitat |
append_rx | Treballadors | Escrivà únic | Limitat |
Les cues limitades proporcionen pressió de retrocés i observabilitat.
Integració de Mètriques
Cada etapa registra telemetria:
- Profunditats de la cua: Punts de pressió visibles
- Durades de les etapes: On es dedica temps
- Contadors de resultats: Taxes d’èxit/fallida
Les mètriques utilitzen una nomenclatura consistent a totes les etapes.
Semàntica de Reversió
Si l’append falla:
Orientació addicional:
- Un sol escriptor aplica el registre d’undo
- Els commits dependents es cancel·len en ordre invers
- Els clients reben 503 amb explicació
- Les mètriques registren el fracàs
Això assegura que el temps d’execució mai tingui un estat orfe.
Apagat Elegant
La shutdown procedeix en ordre:
- Deixeu d’acceptar noves sol·licituds
- Drenatge de treballadors de precomprovació
- Drenar el buffer de reordenament
- Drenar el backlog d’un sol escriptor
- Espereu que els treballadors d’append acabin
- Persistir punts de control finals
No s’abandona cap treball a mitja volada.
Quan llegir això
Llegeix aquest annex quan:
- Depuració dels problemes de latència d’escriptura
- Comprensió de les mètriques de profunditat de la cua
- Modificant el pipeline d’entrada
- Investigant garanties de durabilitat
Per a l’ús diari, la documentació conceptual és suficient.
Veure també
- Model d’execució - Visió general conceptual
- Frescor i Repetició - Com les dades arriben als lectors
- Salut i mètriques - Monitorització del canal