Architecture
Components
Coordinator
Tracks jobs, dispatches work to workers, handles retries and failures. Stateless and leaderless; does not run tasks.
Worker
Runs tasks via a runtime (Docker, Podman, or Shell).
Broker
Routes messages between Coordinator and Workers:
- RabbitMQ — Production-grade message broker
- In-Memory — For testing and single-node deployments
Datastore
Persists job and task state:
- PostgreSQL — Production database
- In-Memory — For testing
Runtime
Execution environment for tasks:
- Docker — Default, best isolation
- Podman — Daemonless Docker alternative
- Shell — Runs on host
Request Flow
Client → Coordinator → Broker → Worker → Runtime (Docker/Podman/Shell)
↓
Datastore
- Client submits job via REST API
- Coordinator stores job in Datastore
- Coordinator publishes tasks to Broker
- Worker receives tasks from Broker
- Worker executes tasks in containers
- Worker reports results back via Broker
- Coordinator updates job state in Datastore
Modes
| Mode | Coordinator | Worker |
|---|---|---|
standalone | ✓ | ✓ |
coordinator | ✓ | ✗ |
worker | ✗ | ✓ |