Arquitectura
Mentat esta pensado como una plataforma privada de workloads con un control plane pequeno, un agent por host y un CLI para operacion. La meta es mantener deploy, scheduling, health y ciclo de vida en un solo sistema sin arrastrar la complejidad operativa de una plataforma mas pesada.
Que Corre Donde
mentat-server
El control plane. Recibe jobs, guarda estado, decide scheduling y coordina deploys, rollbacks y estado de nodos.
mentat-agent
Corre en cada host. Inicia workloads por Firecracker, Sandbox, Docker, exec o Hull y mantiene los detalles de runtime cerca del nodo.
mt
La interfaz de operacion. El equipo la usa para desplegar, escalar, inspeccionar y revertir servicios desde una sola superficie.
mentat-types
Tipos compartidos para definiciones de servicio, recursos, constraints, estrategias de deploy y estado de runtime.
Modelo Operativo
La arquitectura esta optimizada para infraestructura privada. El server decide donde debe correr un workload, el agent lo materializa en el host, y el CLI se mantiene liviano. Asi el control plane sigue pequeno pero soporta runtimes mixtos y workflows de deploy.
1. Operador ejecuta: mt run services.yaml
2. CLI valida el archivo y envia el job a mentat-server
3. Server guarda el estado deseado y elige un nodo
4. Server despacha una asignacion a mentat-agent
5. Agent inicia el workload con el driver seleccionado
6. Server guarda el estado observado y responde al operadorPor Que Esta Forma
| Control plane pequeno | Menor uso de memoria y menor superficie de fallo |
| Agent por host | La logica de runtime queda cerca del nodo |
| CLI liviano | Facil de automatizar por SSH o CI |
| Tipos compartidos | Un solo modelo para config, deploy y estado |
| Abstraccion de drivers | Una sola plataforma para VMs, contenedores, binarios y workloads Hull |
Modelo de Definicion de Servicios
Los servicios declaran runtime, recursos, constraints y estrategia de deploy en una sola especificacion. Ese mismo modelo atraviesa scheduling, rollout y status.
pub enum Driver { Firecracker, Sandbox, Docker, Exec, Hull }
pub enum DeployStrategy { Rolling, BlueGreen, Canary }
pub enum DriverConfig {
Firecracker(FirecrackerConfig),
Sandbox(SandboxConfig),
Docker(DockerConfig),
Exec(ExecConfig),
Hull(HullConfig),
}
pub struct ServiceSpec {
pub name: String,
pub replicas: u32,
pub config: DriverConfig,
pub resources: Resources,
pub constraints: Vec<Constraint>,
pub deploy: DeployConfig,
}Stack de Implementacion
| Runtime | tokio 1.x |
| API HTTP | axum 0.8 |
| Serializacion | serde + serde_json + serde_yml |
| Estado | sled 0.34 |
| Cliente HTTP | reqwest (rustls) |
| Unix Sockets | hyperlocal + hyper |
| CLI | clap 4 (derive) |
| Errores | thiserror |
| IDs | uuid v4 |