Componentes¶
Tres servicios nuevos en el Swarm, más dos almacenes nuevos. Nada de lo existente cambia de comportamiento.
jobs-api (FastAPI)¶
Única cara pública. Responsabilidades:
- Valida el token de acceso y aplica sus cuotas (Acceso y cuotas).
- Lista el catálogo de fuentes con boto3 anónimo (D10) y resuelve una selección del cliente a una lista ordenada de claves.
- Crea el job: fila en la cola, schema y rol del job, token de resultado.
- Sirve el estado del job al cliente (polling) y el enlace al viewer demo.
- Cron de expiración: borra schemas, roles y objetos de jobs vencidos.
No procesa nada. No habla con el ORPG.
job-runner (imagen propia, privada)¶
Imagen construida sobre ghcr.io/vladimir1284/orpg:b24 con el pipeline instalado encima
(uv + l3proc). Privada en GHCR porque contiene binarios del ORPG.
Servicio de larga vida. Bucle: toma un job con SELECT ... FOR UPDATE SKIP LOCKED, lo ejecuta
entero (Ciclo del runner), vuelve a esperar. Concurrencia = número de
réplicas; arranca en 1.
Dentro del contenedor conviven, por job:
| Proceso | Papel |
|---|---|
mrpg + 107 tareas del ORPG |
Genera los productos |
play_a2 |
Inyecta los volúmenes Level II |
nbtcp |
Usuario Class 1 simulado; escribe los productos a disco |
l3proc watch |
Decodifica, hace el COG y publica a R2 + Postgres |
viewer-demo (lamula-webviewer, segunda instancia)¶
Misma imagen que el viewer de producción, otra configuración:
NUXT_PUBLIC_R2_BASE_URL→ hostname del bucket demo.- Credenciales de Postgres por petición, derivadas del token del job en la ruta
/j/<token>.server/dal/pg.tsya cachea conexiones por credenciales, así que esto encaja sin rediseñar el DAL. - Capas de viento y rayos ocultas cuando el job es histórico: no hay GFS ni GLM para 2017.
Cambios necesarios en el repo del viewer, todos aditivos:
- Resolver credenciales a partir del token del job (middleware de servidor).
- Inicializar la línea de tiempo en la ventana del job en vez de "lo más reciente".
- Pantalla de estado mientras el job no está listo.
Almacenes¶
| Almacén | Qué es | Por qué separado |
|---|---|---|
lamula-demo-raster (R2) |
COGs de los jobs, con hostname propio y CORS | El sweep de 72 h de producción no lo ve (D5) |
Base lamula_demo (mismo Postgres) |
Un schema por job | Aislamiento barato y borrado atómico (D4) |
| Prefijo de staging en R2 | Volúmenes Level II descargados para un job | Permite reintentar sin volver a bajar de AWS |
Qué no se toca¶
- El Worker
nexrad-l3-opsno monitoriza jobs. Su trabajo es alertar sobre el feed live. - El schema del pipeline no cambia. Ni una columna.
- El
processorde producción no comparte directorio ni base con el runner.