コンテンツにスキップ
use-cases / per-customer-sandboxes-fleet-scale / hero
コンテナ · マルチテナント SAAS · フリート規模

フリート規模で顧客ごとのサンドボックス

3 台のベアメタルサーバーにまたがる 800 の隔離コンテナ。定額制の月額請求、顧客ごとのメーターなし。各顧客は自分のファイルシステム、自分の URL、自分のカーネル名前空間を取得します。誠実なアーキテクチャはもう高価ではありません。

フリートのドキュメントを読む
use-cases / per-customer-sandboxes-fleet-scale / mechanism

サインアップが 812 サンドボックスのうちの 1 つになる仕組み

課金 webhook が Hoody Exec スクリプトを叩きます。スクリプトはテンプレートスナップショットから新規顧客コンテナをコピーし、新しいテナントは自分の URL に着地し、フリートダッシュボードが 1 増えます。3 つの HTTP コール、オーケストレーターなし。

01 · WEBHOOK

Stripe が exec エンドポイントを呼ぶ

POST /api/v1/exec/scripts/1/webhooks/signup

サーバーレス V8 アイソレート。webhook URL は scripts/1/ 内のただの TypeScript ファイルです。Express も、サーバー設定も、それ自体のコンテナもありません。

02 · COPY

スクリプトが顧客テンプレートをクローン

POST /api/v1/containers/$TEMPLATE/copy

BTRFS コピーオンライト。新しいコンテナはレンタルサーバーのテンプレートからのデルタを消費します。ファイアウォールとネットワークルールはスナップショットと一緒にクローンされます。ヘッドルームのあるフリートサーバーに着地します。

03 · ROUTE

新しい URL がユーザーに返される

https://$PROJECT-$CID-...containers.hoody.com

署名付き authorize エンドポイントが 1 時間有効な container_claim を発行します。アプリは顧客を自分のサンドボックスにリダイレクトします。サインアップの総時間は 60 秒未満。

パイプライン全体は 3 つの HTTP コール。Kubernetes オペレーターも、namespace YAML も、クラスター管理者もありません。フリートはハッシュテーブルがエントリーを追加するのと同じようにテナントを追加します。ただし各エントリーは本物の Linux コンテナです。

use-cases / per-customer-sandboxes-fleet-scale / economics

フリート規模のアイソレーションを安くする計算

他の請求モデルはテナントごとに課金します。Hoody はサーバーごとに課金します。請求単位がテナントからボックスに切り替わると、テナントあたりの数値はあなたが追加する密度で縮小されます。スケールするほどカーブは平らになります。

フリート台帳 · 812 テナント
# 3 つのベアメタルノード、マーケットプレイス価格3 flat-rate servers · one monthly bill# eu-1、us-1、ap-1 でブレンド812 tenants (287 + 304 + 221)# 除数が増える(請求はしない)bill ÷ 812 = cost shrinks as density grows

次の 100 テナントを追加しても請求書は変わりません。除数が増えるだけです。KSM はコンテナ間で同一のメモリページを重複排除し、BTRFS コピーオンライトはサーバー上のベースイメージのバイトを共有したままにします。新しいコンテナはテンプレートからのデルタを消費し、定額制のサーバー請求に留まります。

テナントあたり · 他のスタック
  • AWS FARGATE テナントあたりvCPU + メモリがタスクごとに課金、アイドルでも
    $8〜25
  • K8S NAMESPACE テナントあたりクラスターオーバーヘッドが namespace 間で按分
    $3〜10
  • 専用テナント POD予約済み RAM + CPU、ホットでもコールドでも支払い
    $5〜15
  • HOODY · テナントごとコンテナ1 つのサーバー価格 ÷ テナント密度 — ボックス数で縛られ、テナント数ではない
    定額制

Hoody のサーバー価格はマーケットプレイス主導で、リージョン、スペック、ベンダーによって変わります。例のフリートは 3 ノードを使います。マーケットプレイスサーバーは月額 $29 からで、仕様、地域、レンタル期間によって異なります。競合の見積もりは、同等のテナントごとコンピュートの公開価格からの説明的な範囲です。密度は典型的な SaaS ワークロードを想定しています。1 日のほとんどをアイドルで過ごすテナントです。重いデータベースや AI ワークロードはコンテナごとにより多くのヘッドルームが必要です。

use-cases / per-customer-sandboxes-fleet-scale / powers

この価格でテナントごとコンテナが解き放つもの

アイソレーションが安くなれば、アーキテクチャは妥協をやめます。CFO に却下されてきた機能が標準になります。

オンボーディング

新規顧客はそれぞれ `cp` 1 回で完了

Stripe webhook → Hoody Exec → POST /containers/$TEMPLATE/copy。新しいテナントは他のすべてのテナントが起動したのと同じスナップショットから起動します。同一のベースライン、隔離された未来。tenant_id 列を通す必要も、忘れがちな共有行もありません。

オフボーディング

GDPR 削除は 1 つの HTTP コール

DELETE /api/v1/containers/$CID。ファイルシステムが消え、SQLite が消え、cron ジョブが消え、監査ログが消えます。すべて 1 つの場所に住んでいたからです。「DELETE … WHERE tenant_id … プラス忘れていた他の 12 テーブル」はありません。

ブラスト半径

1 テナントのバグは 1 テナントの中に留まる

ある顧客の暴走スクリプトはそのコンテナの CPU と RAM クォータに当たります。フリート上の他の 811 コンテナは気づきません。うるさい隣人の監査も、共有ロックテーブルも、共有コネクションプールもありません。アプリケーション層が偽装していたアイソレーションを、カーネル名前空間が本物にします。

use-cases / per-customer-sandboxes-fleet-scale / punchline

テナントごとアイソレーションはかつてテナントごとにコストがかかりました。今はサーバーごとです。

かつて$3〜25 / テナントfargate、namespace、または専用 pod
現在定額制812 サンドボックス、3 ベアメタルサーバー、顧客ごとのメーターなし
use-cases / per-customer-sandboxes-fleet-scale / replaces

これが置き換えるもの

テナントごとアイソレーションは歴史的に、巧妙な WHERE 句かテナントごとの請求書のどちらかを意味してきました。フリート規模での顧客ごとコンテナは、その両方を置き換えます:

  • AWS Fargate テナントごとvCPU + RAM がタスクごとに課金、ホットでもコールドでも
  • Kubernetes namespace ごとクラスター + コントロールプレーンのオーバーヘッドがテナントごと
  • tenant_id フィルタリングによる共有マルチテナンシーWHERE を 1 つ忘れると顧客データが漏れる
  • Postgres 行レベルセキュリティのオーバーヘッドすべてのテーブルにポリシー、すべてのクエリに監査
  • 専用テナント pod予約済みコンピュートを使っても使わなくても支払い
use-cases / per-customer-sandboxes-fleet-scale / cta

ノートパソコンが置き換える同じサーバー上に 800 の隔離テナント。誠実なアーキテクチャがついに手頃なものになりました。

コンテナガイドを読む
use-cases / per-customer-sandboxes-fleet-scale / related

他のユースケースを読む