1 つのサーバーで 60 のコンテナ
1 台のベアメタルで、数十から数百の Hoody コンテナを動かす。KSM と BTRFS の重複排除で、限界コストはほぼゼロ。
すべてのテーブルに tenant_id を散在させるのをやめてください。顧客がサインアップすると、実行スクリプトが新規顧客コンテナをコピーし、顧客に独自の URL、独自のファイルシステム、独自の SQLite を提供します。分離はテーブルの WHERE 句ではなく、その間にあるオペレーティングシステムです。
ユーザーがサインアップしたとき、起こることはこれです。
/api/v1/projects/{id}/containers への POST ごとに、分離された環境が起動します。1 回の呼び出しで、1 つのテナント、1 つの URL がアプリに返されます。
Stripe(あるいは任意の課金サービス)の webhook が Hoody Exec のスクリプトを叩きます。Express も、サーバー設定も不要 ── scripts/ にファイルを置くだけです。
新しいコンテナは独自のファイルシステム、独自の SQLite、独自の ramdisk を持ちます。テナント A はテナント B のデータを文字どおり見ることができません。
レスポンスにはコンテナの URL が含まれます。アプリは同じデプロイのタイミングで、ユーザーを専用のサンドボックスへリダイレクトします。
コンテナのネットワークとファイアウォールのルールはテンプレートからコピーされます。新しいテナントはすべて、同じセキュリティ基準から始まります。
コンテナを停止すれば、コストはかかりません。BTRFS はテンプレートとの差分だけを保持します ── スケールしてもディスクは安いままです。
1 回の DELETE 呼び出しで、コンテナとそのすべてのデータが削除されます。GDPR のオフボーディングはスクリプトではなく、1 回の HTTP 呼び出しです。
フロー全体が Webhook ハンドラ 1 つ。Kubernetes オペレータも、namespace の YAML も、クラスタ管理者も不要。HTTP 3 本——Webhook を受け、コンテナを返し、URL をユーザーに渡すだけです。
従来の選択肢は、すべてのテーブルにカラムを置くか、買えない VM フリートでした。Hoody は 3 つ目の形: すべての顧客に 1 つずつ与えるのに十分安いコンテナです。
マルチテナンシーはアーキテクチャ問題でなくなります。`cp` コマンドになります。
POST /containers/$TEMPLATE/copyDELETE /containers/$CIDPATCH /containers/$CID [ env_vars ]テナントごとの隔離は歴史的に、巧妙な WHERE 句か高価なクラスターを意味しました。顧客ごとのコンテナは通常の回避策を置き換えます:
アイドル顧客はコストがかかりません。アクティブな顧客はオンデマンドでスケール。全体は数百の支払いユーザーになるまで $49 のベアメタルで動きます。