2.3 Componentes del Backend
Este diagrama modela la arquitectura de subsistemas y componentes de software de Mañuti, mostrando el acoplamiento y flujo de datos entre la capa HTTP, los proveedores de servicio, los demonios asíncronos y los tres motores de persistencia híbrida.
1. Explicación y Semántica del Diagrama
El sistema se divide en cuatro capas claramente delimitadas:
- Capa Cliente: Navegadores y terminales móviles que consumen la aplicación mediante HTTPS y WebSockets seguros (WSS).
- Capa de Aplicación (Laravel Backend):
Http Kernel: Aloja controladores y la tubería de middlewares (Auth,PreventBackHistory,CheckActiveSession,AuditMiddleware).Service Providers: Hidratan servicios esenciales (AppServiceProvider,HorizonServiceProvider).Gate (RBAC): Motor de evaluación de capacidades en memoria.
- Capa de Procesamiento Asíncrono (Background Services):
Horizon Supervisor: Orquesta y balancea procesos worker dedicados.Queue Worker: Despacha tareas pesadas hacia la persistencia documental.
- Capa de Persistencia Híbrida:
MariaDB (SQL): Datos relacionales, transacciones ACID, integridad referencial y seguimiento de lotes.Redis (In-Memory): Sesiones ultraligeras, almacén de caché con tags y broker de colas.MongoDB (NoSQL): Almacén masivo de eventos forenses inmutables.
2. Cómo se Lee este Diagrama
- Las cajas engloban componentes que residen en el mismo espacio de ejecución o servidor.
- Las flechas sólidas representan llamadas sincrónicas directas (invocaciones a métodos o consultas de lectura/escritura inmediata).
- Las flechas discontinuas (
-.->) representan transporte de datos asíncrono desacoplado (encolamiento en Redis y extracción por parte de workers).
3. Implementación en el Framework Mañuti
- El tráfico web ingresa a
AuthControlleryAuditMiddleware. - El
AuditMiddlewareno escribe en MongoDB directamente; despacha un job (ProcessAuditLog) hacia la cola de Redis en milisegundos. - El supervisor de Horizon extrae el job de Redis y delega la inserción final del documento BSON al worker conectado a MongoDB, garantizando cero latencia añadida al cliente HTTP.
4. Diagrama Mermaid
flowchart LR
%% Cliente
subgraph Cliente ["Cliente"]
Browser["Navegador Web"]
end
%% Servidor de Aplicación
subgraph AppServer ["Servidor de Aplicación (Laravel 12)"]
subgraph HttpKernel ["Http Kernel"]
AuthController["Auth Controller"]
AuditMiddleware["Audit Middleware"]
SessionMiddleware["Session Middleware"]
end
subgraph ServiceProviders ["Service Providers"]
AppServiceProvider["AppServiceProvider"]
HorizonServiceProvider["HorizonServiceProvider"]
end
subgraph Workers ["Workers & Queues"]
HorizonSupervisor["Horizon Supervisor"]
QueueWorker["Queue Worker"]
end
Gate(["Gate (RBAC)"])
end
%% Capa de Persistencia
subgraph CapaPersistencia ["Capa de Persistencia Híbrida"]
subgraph DB_SQL ["MariaDB (SQL)"]
Usuarios[("Usuarios")]
RolesPermisos[("Roles/Permisos")]
EstadoBatches[("Estado Batches")]
end
subgraph DB_Mongo ["MongoDB (NoSQL)"]
ColeccionAuditoria[("Colección Auditoría")]
end
subgraph DB_Redis ["Redis (In-Memory)"]
SessionStore[("Session Store")]
CacheStore[("Cache Store")]
QueueList[("Queue List")]
end
end
%% Relaciones
Browser -->|"HTTPS Request"| SessionMiddleware
SessionMiddleware -.->|"Read/Write SessionID"| DB_Redis
AuthController --> AppServiceProvider
AppServiceProvider --> Gate
Gate -.->|"Query Permissions"| DB_SQL
AuthController -->|"Next()"| AuditMiddleware
AuditMiddleware -->|"Dispatch Job (Async)"| DB_Redis
HorizonSupervisor -.->|"Pop Job"| DB_Redis
HorizonSupervisor -->|"Execute"| QueueWorker
QueueWorker -->|"Write Log JSON"| DB_Mongo