
1 つのサーバーで 60 のコンテナ
1 つのベアメタルボックスで数十から数百の Hoody コンテナを実行。KSM と BTRFS のデデュプでマージナルコストはほぼゼロ。
毎時のブラウザスクレイプ、日次の SQLite ダイジェスト、週次のファイルアーカイブ。3 つのリズムは 1 つの crontab にきれいに収まります — 3 つのスクリプトを指す 3 行の `* * * * *` にすぎません。スケジューラサービスもジョブキューもワーカープールもありません。
1 つの crontab · 3 つのカデンス · 同じコンテナ
Hoody Cron サービスは raw crontab を REST リソースとして公開します。一度ファイルを PUT すれば、カーネルが永遠に実行します。3 行、3 スクリプト — それぞれがすでに HTTP を話す 1 行スクリプトです。
# 1 回の呼び出しで crontab 全体を置き換えます。
PUT /users/root/crontab
Content-Type: text/plain
@hourly bash /scripts/scrape.sh
0 9 * * * bash /scripts/digest.sh
0 0 * * 0 bash /scripts/archive.sh
HTTP/1.1 204 No Content# scrape.sh — 毎時、スクリーンショットを sqlite にファンアウト
curl -sS https://browser.containers.hoody.com/screenshot \
--data-urlencode "url=https://store.hoody.com/p/123" | sqlite3 /data/prices.db \
"INSERT INTO rows VALUES (?, ?, ?)"
# digest.sh — 9 時、差分を計算してダイジェストをパイプ
sqlite3 /data/prices.db < /scripts/digest.sql \
> /tmp/digest.txt && curl -T /tmp/digest.txt \
https://pipe.hoody.com/api/v1/pipe/digest
# archive.sh — 日曜の真夜中、ダンプして保存
sqlite3 /data/prices.db ".dump" | curl -T - \
https://files.containers.hoody.com/archives/$(date +%Y-w%V).sql3 つのスクリプト。それらがすでに呼び出し方を知っている 3 つの URL。スケジュールをインストールするための 1 回の PUT リクエスト。この前にスケジューラサービスはありません — カーネルの crond があなたが書いたファイルを読んで実行します。
各カデンスには、1 つの 5 フィールド表現と 1 つのシェル行があるだけです。どれも他の 2 つを知る必要がありません — ディスクとクロックを共有しているだけです。
hoody-browser が製品 URL のリストをスクリーンショットします。各行はコンテナのボリューム上の SQLite テーブルに直接入ります。スクレイプワーカープールはありません — cron 行がワーカープールです。
9 時にダイジェストスクリプトが直近 24 時間の行を読み、価格差分を計算し、ダイジェストをパイプ URL に curl します。受信トレイ / ダッシュボードは同じパイプから読みます。
日曜の真夜中にアーカイブスクリプトが SQLite を `.dump` し、ISO 週でファイル名を付けて hoody-files に PUT します。古い行は削除されます。ボリュームは永久に小さく保たれます。
1 つのコンテナの中の 3 つのカデンスはハックではありません — それは cron の自然な形です。プラットフォームはすでにスケジューラを提供しています。3 倍のお金を払うのをやめただけです。
毎時のスクレイプは、日次のダイジェストが読む行を書きます。日次のダイジェストは、週次のアーカイブがダンプする差分を書きます。それらの間に IPC はありません — 同じボリューム上の 3 つのプロセスです。
再デプロイするときは 1 つのイメージを再デプロイします。ログを確認するときは 1 つのログファイルを tail します。ディスクが満杯になるときは 1 度満杯になります。どのカデンスの影響範囲も他と同じです。
Lambda/EventBridge は呼び出しごとに課金します。ECS Scheduled Tasks は常時稼働クラスタに課金します。Hoody では、定額制のサーバー内で動作します。3 つのカデンスは 1 つと同じコスト。
crontab はファイルです。ファイルには URL があります。ファイルに対してできることは何でも、HTTP 経由でできます。
UUID とオプションのコメントを持つマネージドエントリを作成します。API が crontab に行を挿入し、後で有効化、無効化、削除するためのハンドルを返します。
インシデント中にカデンスを一時停止し、定義を失わないようにします。インシデントがクローズしたらまたオンに戻します。行はファイルに残り、managed-disabled としてコメントされます。
すべてのマネージドエントリを含む raw crontab をいつでも取得します。リポジトリと差分を取ります。バージョン管理にパイプします。cron はファイルであり、今やそのファイルは URL です。
Hoody Cron API のエンドポイント: マネージドエントリ CRUD に加えて、ユーザーごとの完全な raw-crontab 読み書き。標準の 5 フィールド表現とマクロ (@hourly、@daily、@weekly)。
実際のメカニックから得た 3 つの数字。数値は Hoody Cron API の保証と定額制のサーバーモデルによるもので、捏造したベンチマークではありません。
3 つのカデンスすべてが定額制のサーバー内で動きます。月額 $29 からの入門サーバー。追加の cron 行は追加料金なし。
1 つの @hourly、1 つの 9 時の日次、1 つの日曜の週次。/users/root/crontab に 3 行。オーケストレーター全体が 1 つの PUT リクエストに収まります。
Lambda なし、EventBridge なし、Sidekiq なし、Airflow スケジューラなし、ECS スケジュールタスク定義なし。cron の HTTP API がスケジューラです。
Hoody Cron API より: JSON CRUD によるマネージドエントリ、raw-crontab の読み書き、expires_at による自動失効、ユーザーごとの crontab 分離。マクロ @hourly / @daily / @weekly は 5 フィールド表現と並んで受け入れられます。
3 つのカデンス、3 つの cron 行、定額制のサーバー月額 $29/月から。
3 つの Lambda、3 つの GitHub Actions、3 つの ECS スケジュールタスク — 3 つのカデンスのために手が伸びる標準的なスタック。それぞれが呼び出しごとまたは呼び出しごとに課金します。Hoody はサーバーの料金を請求します。
スケジューラを借りるのをやめましょう。スケジュールをファイルに書き込んでください。コンテナはすでに cron を実行しています — 3 行後にはパイプライン全体が出荷できます。