
1 つのサーバーで 60 のコンテナ
1 つのベアメタルボックスで数十から数百の Hoody コンテナを実行。KSM と BTRFS のデデュプでマージナルコストはほぼゼロ。
あなたの SaaS では各顧客が自分のレポート生成をスケジュールできます。ナイーブな設計は共有スケジューラ 1 つ、ジョブペイロードに顧客 ID、誰も他人を飢えさせないことを祈るだけ。Hoody の設計は、すべてのテナントに専用のコンテナと専用の hoody-cron サービスを与えます。
3 段階のライフサイクル、1 つの HTTP API。PROVISION がエントリを追加、cron tick がそれを実行、DELETE が一時停止。各テナントの cron は専用コンテナで生存 — 共有キューなし、ノイジーネイバーのリスクなし。
各顧客コンテナは hoody-cron HTTP API を公開しています。POST でプロビジョン、GET で検証、DELETE で一時停止。共有キューなし、優先レーンなし、再デプロイするスケジューラ設定なし。
# POST managed entry for acme-corp tenant
POST acme-cron.hoody.com/users/root/entries
Content-Type: application/json
{
"schedule": "0 9 * * *",
"command": "/usr/local/bin/digest.sh",
"comment": "daily digest",
"enabled": true
}HTTP/1.1 201 Created
Content-Type: application/json
{
"id": "7d3f2a1b-8c4e-4f9a-b2d5",
"schedule": "0 9 * * *",
"schedule_human": "At 09:00",
"enabled": true,
"user": "root"
}各タブはコントロールプレーンが実行する正確な API コールを示します。マネージドエントリ API は UUID を使用するため、crontab 全体を置き換えずに個別のジョブを対象にできます。ユーザー単位の隔離は acme-corp のスケジュールが globex-saas に見えないことを意味します。
1 つの定額制サーバー。60 のテナントコンテナ。数学は容赦ありません。
initech-inc の scrape.js がハングしても、acme-corp の朝 9 時のダイジェストはまだ発火します。異なる crontab、異なるプロセスツリー、異なるファイルシステム。
新しいエントリを POST すると、テナントの hoody-cron サービスがすぐに取得します。中央スケジューラのリロードなし、送信するブロードキャストなし。
globex-saas が「朝 6 時のロールアップが 2 回実行された理由」を尋ねたとき、9 台のマシン横断 grep ではなく、1 つのコンテナのログを読みます。
古い設計がチームに税金を課す 3 つの軸、Hoody の設計はそれを課しません。
古い欄は、すべてのチームがマルチテナント スケジューリングを最初に出荷するときに書くものです。新しい欄は、プラットフォームがデフォルトで全テナントに専用コンテナを与えたときに出荷するものです。
全顧客が専用 crontab を持つとき、1 つのベアメタル Hoody ボックスが処理できる量。
1 つのベアメタルノードに 60 の顧客コンテナ、それぞれ専用の hoody-cron サービスが稼働。共有スケジューラのボトルネックなし。
PUT リクエストから新スケジュールの最初のティックまで、典型的な 64 コアノード上の 60 コンテナ群で観測。
2 つのテナントが競合する共有キュー、優先レーン、スケジューラスレッドは文字通り 1 つもありません。隔離が基盤です。
キャパシティ数値は、標準の Hoody コンテナ密度で稼働する 64 コア / 256GB ベアメタルノード上で観測される典型値です。実際のキャパシティはテナントごとの CPU とメモリ予算、各 cron ジョブが行う作業に依存します。テナント間キューのゼロは構造的なもので、ベンチマークではありません。
ある顧客の cron が別の顧客を飢えさせることはできません。同じ crontab に乗っていないからです。
テナント間で 1 つの crontab を共有するためにチームが構築するアーキテクチャ。Hoody は各テナントを専用 crontab に配置します — ルーターなし、フェアネスキューなし、ノイジーネイバーなし。
tenant_id をあちこちに書くのをやめましょう。すべての顧客に専用コンテナを与え、cron に常にやってきたことを隔離して行わせましょう。