Zum Inhalt springen
use-cases / daily-rollups-no-orchestrator / hero
DAILY ROLLUPS · KEIN ORCHESTRATOR

Daily Rollups ohne Orchestrator

Jede Nacht um 1 Uhr curlt ein Cron-Eintrag eine Exec-URL. Das Skript führt dein Rollup-SQL auf der SQLite-URL aus und schreibt die Daily-Tabelle zurück. Kein Airflow-Postgres, kein DAG-File, kein Scheduler-Dashboard mit 14 Widgets, kein On-Call für den Orchestrator selbst.

Doku lesen
use-cases / daily-rollups-no-orchestrator / mechanism

Zwei URLs und ein Fünf-Felder-Schedule

Die ganze Pipeline ist ein Cron-Eintrag, der auf eine Exec-URL zeigt. Der Cron-Eintrag ist ein POST an /users/root/entries. Die Exec-URL ist ein kleines Skript, das die SQLite-URL öffnet, das Rollup-SQL ausführt und die neuen Zeilen zurückgibt. Das ist der gesamte DAG.

POST /users/root/entries
DER SCHEDULE
// jede Nacht um 01:00 UTC
POST /users/root/entries
{
  "schedule": "0 1 * * *",
  "command":  "curl -fsS https://exec.containers.hoody.com/scripts/rollup/run"
}
1AM · CURL
exec.containers.hoody.com/scripts/rollup/run
DIE PIPELINE
// der gesamte Pipeline-Body
import { Database } from "bun:sqlite";

const db = new Database("events.db");
db.run(`INSERT INTO rollup_daily
         SELECT date_trunc('day', created_at), count(*)
         FROM   events GROUP BY 1;`);

return { ok: true, rows: db.query("SELECT * FROM rollup_daily").all() };

Wenn das Rollup scheitert, sagen es die Cron-Logs. Wenn du gestern backfillen musst, curlst du die Exec-URL von Hand mit einem Date-Parameter. Es gibt kein zweites System zu lernen, keine Scheduler-Datenbank am Leben zu halten, kein DAG-File zu committen. Der Orchestrator ist ein Cron-Eintrag, der auf eine URL zeigt.

use-cases / daily-rollups-no-orchestrator / powers

Was du nicht bauen musstest

Das Hoody Kit liefert den Scheduler, die Runtime und das Storage als ganz normale HTTP-Services. Die Pipeline ist der curl-Call zwischen ihnen — sonst nichts.

KEIN ORCHESTRATOR-DAEMON

Der Scheduler ist ein HTTP-Eintrag

hoody-cron speichert Schedules als Ressourcen unter /users/root/entries. Keine Postgres-Metadaten-DB zum Backuppen, kein Scheduler-Container, der gesund bleiben muss, kein DAG-Repository zum Deployen. POSTe eine Zeile, und der Run feuert.

KEINE RUNTIME-VERDRAHTUNG

Das Skript ist eine URL

hoody-exec führt das Rollup-Skript on-demand unter exec.containers.hoody.com/scripts/rollup/run aus. cron curlt es, kriegt 200, loggt die Antwort. Keine Worker-Queue, kein Broker, kein gepickelter Task-Graph.

KEINE LOGS-PIPELINE

Run-History ist der Response-Body

Jeder Exec-Call gibt die neuen Zeilen als JSON zurück und wird von cron mit Status, Timestamp und stdout geloggt. Backfills, Failures und Reruns leben alle in denselben zwei URLs — nichts Extras zu einem Log-Aggregator zu shippen.

use-cases / daily-rollups-no-orchestrator / backfill

Wenn ein Run scheitert — oder du backfillen musst

Die Pipeline sind zwei URLs und ein Date-Param. Gestern erneut laufen zu lassen ist dieselbe Form wie der nächtliche Run, nur mit ?date=2026-04-30 an der Exec-URL. Kein Replay-UI, keine Scheduler-Eigenheiten.

  1. 01 · DETECT

    Cron-Logs sagen, dass es gescheitert ist

    Wenn der 1-Uhr-Run einen Non-2xx zurückgegeben hat, zeigt der Last-Run-Record des Eintrags auf hoody-cron den Exit-Code und den eingefangenen Response-Body. Kein separater Alerting-Service zu verdrahten — GET den Eintrag und lies.

  2. 02 · BACKFILL

    Curl die Exec-URL mit ?date=

    Das Skript akzeptiert einen Date-Parameter. Reich gestriges Datum durch, und es berechnet die Rollup-Zeile dieses Tages neu — ersetzt die kaputte mit einem INSERT OR REPLACE. Ein Befehl, kein DAG-Re-Trigger-UI.

  3. 03 · VERIFY

    Die Antwort ist die neue Zeile

    exec gibt die frisch geschriebene Rollup-Zeile als JSON zurück. Diff sie gegen das, was du erwartet hast, und mach weiter. Sonst nichts zu prüfen — die Dashboard-URL serviert dieselbe Tabelle, die du gerade geschrieben hast.

// gestriges Rollup von Hand erneut ausführencurl -fsS https://exec.containers.hoody.com/scripts/rollup/run?date=2026-04-30
use-cases / daily-rollups-no-orchestrator / capacity

Die Form der Pipeline

Drei Zahlen beschreiben das gesamte System. Vergleich sie mit dem, was ein Airflow-Deployment heute in deinem Repo aussieht.

  1. FELDER · CRON-SCHEDULE5

    minute, hour, day-of-month, month, day-of-week. Das ist die volle Konfigurationsoberfläche dafür, wann ein Run feuert.

  2. URLS · ENTRY + EXEC2

    ein POST, um den Schedule zu registrieren, ein GET, der das Skript ausführt. Das ist die gesamte deploybare Pipeline.

  3. DAEMONS · KEIN ORCHESTRATOR0

    kein Scheduler-Prozess am Leben zu halten, keine Metadaten-Datenbank, kein Worker-Pool. Hoody Kit hält die Schedules und führt das Skript aus.

Die Zahlen beschreiben das Cron-+-Exec-Modell auf Hoody Kit. Deine bestehende Pipeline hat wahrscheinlich mehr bewegliche Teile; das ist der Punkt des Vergleichs.

use-cases / daily-rollups-no-orchestrator / punchline

Der Orchestrator ist ein Cron-Eintrag, der auf eine URL zeigt.

VORHER · EIN SCHEDULER-STACKNACHHER · EINE CRON-ZEILE
VORHERairflow webserver + scheduler + worker + postgres + dags/rollup_daily.pyFÜNF PROZESSE, EINE METADATEN-DB UND EIN REPO VOLLER DAG-FILES
JETZT0 1 * * * curl -fsS https://exec.containers.hoody.com/scripts/rollup/runEINE ZEILE. EINE URL. EIN SCHEDULE.
Doku lesen
use-cases / daily-rollups-no-orchestrator / replaces

Was das ersetzt

Die Orchestrierungsschicht kollabiert in einen einzeiligen Cron. Der DAG lebt in deinem Skript.

  • Apache AirflowEin Postgres + Redis + Scheduler + Worker für eine Query
  • PrefectCloud-Account, Agent-Install, Flow-Registration
  • DagsterPythonic, aber immer noch ein Service, den du betreibst
  • LuigiEine Graph-Engine, um dein nächtliches SQL zu schedulen
  • GitHub-Actions-SchedulesAn main gepinnt, kein Per-Tenant-Kontext
  • dbt CloudEin SaaS, das ein CLI wrappt, das ein SELECT wrappt
  • Custom-Python-SchedulerEine While-Loop und ein try/except, genannt "robust"
use-cases / daily-rollups-no-orchestrator / cta

Hör auf, einen Orchestrator zu betreiben. Lass einen Cron-Eintrag laufen.

Doku lesen
use-cases / daily-rollups-no-orchestrator / related

Lies die anderen