Arquitectura de Ruta de Escritura

Este apéndice proporciona una explicación detallada de cómo fluyen los commits a través del daemon de escritura de Asset Core, desde la solicitud HTTP hasta la persistencia duradera.

Visión general

El camino de escritura está diseñado para un alto rendimiento mientras mantiene estrictas garantías de orden y semánticas de durabilidad. Combina un ingreso amplio con una ejecución serial de un solo escritor y durabilidad en múltiples etapas.

Explicación detallada

Etapas del Pipeline

El camino de escritura consiste en nueve etapas:

  1. Admisión: el manejador HTTP asigna un número de secuencia, adquiere permisos
  2. Preverificación: Validación paralela (análisis, esquema, autenticación, tamaño, idempotencia)
  3. Buffer de Reordenamiento: Asegura un orden de secuencia estricto
  4. Escritor Único: Adquiere bloqueo en tiempo de ejecución, ejecuta operaciones
  5. Sellado: Crea un lote de eventos, registra el log de deshacer
  6. Anexar Envío: Envía el lote para agregar al grupo de trabajadores
  7. Durabilidad: Los trabajadores llaman a fsync, devuelven el resultado
  8. Finalización: Actualiza el estado, responde al cliente
  9. Controlador/Lector: registro de Tails, actualiza proyecciones

Subsistema de Ingress

La capa de ingreso acepta solicitudes HTTP y las alimenta en la canalización:

HTTP POST → Sequence Assignment → Precheck Workers → Reorder Buffer

Componentes clave:

  • Contador de secuencia: u64 atómico para un orden estricto
  • Semáforo de reordenamiento: Limita el tamaño del búfer
  • Cola de trabajo: Canal limitado para prever trabajadores

Este diseño proporciona retropresión cuando el sistema está sobrecargado.

Precheck Pipeline

Los trabajadores de prechequeo ejecutan pasos de validación en paralelo:

  1. Analizar: Deserializar JSON, calcular hash canónico
  2. Esquema: Validar la estructura de la operación
  3. Autenticación: Verificar permisos (si está configurado)
  4. Tamaño: Hacer cumplir los límites de tamaño de las solicitudes
  5. Idempotencia: Verificar commits duplicados

Cada paso devuelve Continue o ShortCircuit. Los cortocircuitos devuelven respuestas en caché sin entrar en el carril de compromiso.

Carril de Escritor Único

El escritor único serializa todas las mutaciones en tiempo de ejecución:

Validated Commit → Lock Runtime → Execute Operations → Seal Batch → Submit Append

Esto garantiza:

  • No hay condiciones de carrera en el estado
  • Ordenamiento determinista
  • Semántica de deshacer limpia

El bloqueo de tiempo de ejecución se mantiene solo durante la ejecución, no durante la entrada/salida.

Durabilidad de la Pipeline

Lotes sellados fluyen hacia el grupo de trabajo de anexado:

Sealed Batch → Append Queue → Worker Thread → Commit Log → fsync → Result

Los trabajadores son hilos del sistema operativo (no tareas asíncronas) para manejar la entrada/salida bloqueante. Los resultados fluyen de regreso al único escritor para la finalización.

Flujo del Evento

Los eventos llevan cargas híbridas:

  • Delta: Lo que cambió (para análisis)
  • Estado posterior: Valor final (para reproducción)

Esto permite tanto análisis eficientes como reproducción idempotente.

Notas de implementación

Topología de Canal

El sistema utiliza canales mpsc limitados entre etapas:

CanalRemitenteReceptorLímites
work_txManejador HTTPGerente de prechequeoqueue_capacity
result_txTrabajadoresBuffer de reordenamientoLimitado
commit_txBuffer de reordenamientoEscritor únicoappend_queue_capacity
append_txEscritor únicoTrabajadores de anexadoLimitado
append_rxTrabajadoresEscritor únicoLimitado

Las colas limitadas proporcionan retroalimentación y observabilidad.

Integración de Métricas

Cada etapa registra telemetría:

  • Profundidades de la cola: Puntos de presión visibles
  • Duraciones de las etapas: Donde se gasta el tiempo
  • Contadores de resultados: tasas de éxito/fracaso

Las métricas utilizan una nomenclatura consistente en todas las etapas.

Semántica de Reversión

Si la adición falla:

  1. El escritor único aplica el registro de deshacer
  2. Los commits dependientes se abortan en orden inverso
  3. Los clientes reciben 503 con explicación
  4. Las métricas registran la falla

Esto asegura que el tiempo de ejecución nunca tenga estado huérfano.

Apagado Elegante

El apagado se lleva a cabo en orden:

  1. Dejar de aceptar nuevas solicitudes
  2. Drenar trabajadores de prechequeo
  3. Drenar el búfer de reordenamiento
  4. Drenar la acumulación de un solo escritor
  5. Espere a que los trabajadores de anexado terminen
  6. Persistir puntos de control finales

No se abandona ningún trabajo en medio del vuelo.

Cuándo leer esto

Lea este apéndice cuando:

  • Depuración de problemas de latencia de escritura
  • Comprensión de las métricas de profundidad de cola
  • Modificando el pipeline de ingreso
  • Investigando garantías de durabilidad

Para el uso diario, la documentación conceptual es suficiente.

Ver también