
1 つのサーバーで 60 のコンテナ
1 つのベアメタルボックスで数十から数百の Hoody コンテナを実行。KSM と BTRFS のデデュプでマージナルコストはほぼゼロ。
毎晩 1 時、cron エントリが exec URL を curl します。スクリプトはあなたの sqlite URL 上でロールアップ SQL を実行し、日次テーブルを書き戻します。Airflow Postgres なし、DAG ファイルなし、14 のウィジェットを持つスケジューラ ダッシュボードなし、オーケストレーター自体のオンコールなし。
SELECT date_trunc('day', created_at) AS d,
count(*) AS n
FROM events
WHERE created_at >= 'today'
GROUP BY 1 -- the whole pipelineダッシュボードがオーケストレーター。1 つの URL。1 つのスケジュール。
パイプライン全体は 1 つの exec URL を指す 1 つの cron エントリです。cron エントリは /users/root/entries への POST。exec URL は sqlite URL を開き、ロールアップ SQL を実行し、新しい行を返す小さなスクリプトです。それが DAG 全体です。
// every night at 01:00 UTC
POST /users/root/entries
{
"schedule": "0 1 * * *",
"command": "curl -fsS https://exec.containers.hoody.com/scripts/rollup/run"
}// the entire 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() };ロールアップが失敗した場合、cron ログがそう報告します。昨日をバックフィルする必要があれば、date パラメータ付きで exec URL を手動で curl します。学ぶ 2 つ目のシステム、生かし続けるスケジューラ DB、コミットする DAG ファイルはありません。オーケストレーターは URL を指す cron エントリです。
Hoody Kit はスケジューラ、ランタイム、ストレージをプレーンな HTTP サービスとして出荷します。パイプラインはそれらの間の curl コール — それだけです。
hoody-cron はスケジュールを /users/root/entries のリソースとして保存します。バックアップする Postgres メタデータ DB なし、健全に保つスケジューラ コンテナなし、デプロイする DAG リポジトリなし。1 行を POST すれば実行が発火します。
hoody-exec は exec.containers.hoody.com/scripts/rollup/run で要求に応じてロールアップ スクリプトを実行します。cron が curl し、200 を受け取り、レスポンスをログ。ワーカー キュー、ブローカー、pickle 化されたタスク グラフなし。
各 exec コールは新しい行を JSON として返し、cron がステータス、タイムスタンプ、stdout でログします。バックフィル、失敗、再実行はすべて同じ 2 つの URL に存在 — ログ集約システムへ送る追加要素はありません。
パイプラインは 2 つの URL と date パラメータです。昨日の再実行は夜間実行と同じ形で、exec URL に ?date=2026-04-30 を付けるだけ。リプレイ UI なし、スケジューラの癖なし。
1 時の実行が non-2xx を返したら、hoody-cron 上のエントリの最新実行レコードに終了コードとキャプチャされたレスポンスボディが表示されます。配線する別個のアラート サービスは不要 — エントリを GET して読むだけ。
スクリプトは date パラメータを受け付けます。昨日の日付を渡すと、その日のロールアップ行を再計算し、INSERT OR REPLACE で壊れた行を置き換えます。1 つのコマンド、DAG 再トリガー UI なし。
exec は新しく書き込まれたロールアップ行を JSON として返します。期待した結果と diff を取り、次に進みます。他に確認することはありません — ダッシュボード URL は今書いたのと同じテーブルを提供します。
3 つの数字でシステム全体を記述します。あなたのリポジトリにある今日の Airflow デプロイメントと比較してください。
分、時、日、月、曜日。実行が発火するタイミングの設定面はそれだけです。
スケジュール登録の 1 つの POST、スクリプトを実行する 1 つの GET。それがデプロイ可能なパイプライン全体です。
生かし続けるスケジューラ プロセスなし、メタデータ データベースなし、ワーカー プールなし。Hoody Kit がスケジュールを保持しスクリプトを実行します。
数字は Hoody Kit 上の cron + exec モデルを表します。既存のパイプラインにはおそらく可動部品がもっと多いでしょう、それが比較の要点です。
オーケストレーターは URL を指す cron エントリです。
オーケストレーション層は 1 行の cron に折りたたまれます。DAG はあなたのスクリプトの中に住みます。
オーケストレーターを稼働させるのをやめましょう。cron エントリを稼働させましょう。