// 01 · Servicio headless
Un solo binario, sin UI embebida. Tu app nunca importa GFire como librería — solo HTTP y curl.
GFire es un servicio Go headless: las apps encolan trabajo por HTTP, los workers ejecutan binarios externos y el estado vive en PostgreSQL, Redis o ValKey. v1.0.0 — listo para producción: bulk enqueue, cron recurrente, métricas Prometheus, CLI y tests E2E incluidos.
curl -fsSL https://get.gfire.hermesrodriguez.com/install.sh | sh
Un solo binario, sin UI embebida. Tu app nunca importa GFire como librería — solo HTTP y curl.
PostgreSQL con SKIP LOCKED, Redis/ValKey con BRPOP y scripts Lua. Elige el backend que encaje con tu stack.
Nodos peer, storage compartido, sin Raft. Añade pods; se coordinan vía storage.
Notas técnicas · v1.0.0
GFire es un servicio headless de orquestación de trabajos: cualquier cliente con HTTP puede encolar sin importar una librería atada a un runtime. v1.0.0 incluye el stack completo — backends PostgreSQL (SKIP LOCKED), Redis y ValKey, API REST con bulk enqueue y claves de idempotencia, trabajos recurrentes con distributed locks, CLI, métricas Prometheus y suite E2E. Agnóstico por diseño; los handlers son binarios externos.
Un driver para Redis y ValKey: cambia la dirección, misma implementación. Compatible con forks open source y Redis gestionado.
Los workers bloquean en la cola en lugar de hacer polling. Menos CPU y red; un job despierta al worker en cuanto llega.
N nodos GFire peer comparten storage — sin Raft entre pods. Lua mueve jobs de forma atómica (p. ej. encolado → en ejecución); la capa de datos evita condiciones de carrera.
Jobs diferidos y programados usan score = timestamp Unix. El scheduler solo extrae trabajo ya vencido — escala con backlogs grandes.
| Herramienta | Modelo | Storage | Agnosticismo |
|---|---|---|---|
| GFire | HTTP / servicio headless | PostgreSQL, Redis, ValKey | Alto — agnóstico |
| Faktory | Protocolo / headless | Redis | Alto — protocolo TCP propio |
| Asynq | Librería Go (embebida) | Redis | Bajo — solo Go |
| River | Librería Go (embebida) | PostgreSQL | Bajo — solo Go |
| Sidekiq | Gema Ruby (embebida) | Redis | Bajo — solo Ruby |
| Celery | Librería Python (embebida) | Redis, RabbitMQ, SQL | Medio — Python primero |
GFire es standalone y sidecar-ready: encola con curl o cualquier cliente HTTP/JSON — sin SDK en tu app. A diferencia del protocolo TCP de Faktory o librerías in-process (Sidekiq, Asynq, River), los handlers son binarios externos.
GFire no ejecuta tu lógica de negocio in-process. Los workers hacen dequeue y lanzan un subproceso por job (`cmd` en YAML). Handlers en Go, Python, Node, shell — GFire supervisa exit code, reintentos y continuaciones. Los handlers no hablan con Redis/PostgreSQL; el servicio posee el contrato de storage.
Los jobs son disparadores pequeños, no payloads pesados. Los datos viven en S3 o tu base de datos; GFire transporta la instrucción. Memoria Redis predecible y sin inestabilidad por mensajes grandes.
Instala el CLI y verifica el binario (hoy: gfire version).
$ curl -fsSL https://get.gfire.hermesrodriguez.com/install.sh | sh $ gfire version
v1.0.0 — release estable. API REST, worker engine y CLI completos.
Hitos planificados:ROADMAP.md
| Repo | Rol |
|---|---|
| hrodrig/gfire | Servicio, backends de storage, releases |
| SPECIFICATIONS.md | Contrato de comportamiento y diseño |