テナント、ホスト、データフィルター
ToRun は ABP Framework のマルチテナントモデルの上に作られています。IsMultiTenant が付いた行には TenantId 列があり、フレームワークが自動的に絞り込みます。あるテナントのコンテキストで実行されたクエリが、別のテナントの行を目にすることはありません。ホストのコンテキスト(TenantId == null)は別の領域を見ます。SubscriptionPlan、AiProvider、LegalDocument などの標準カタログはそこにあります。
ホストを正式な参加者として扱う理由
多くの SaaS 製品は、ホストを「管理ツール」として後付けします。当社はホストを兄弟テナントとしてモデル化しています。ホストは独自のダッシュボード、独自の AI ポリシー、独自の課金関係を持ちます。これにより、自社の本番トラフィックを、すべての顧客が使うのと同じ部品の上で動かせます。
テナントごとのプラン連動機能
サブスクリプションプランには FeatureLimit、Entitlement、Capability、Mode の行が含まれます。テナントがプランを有効にすると、利用できる機能の集合は、そのプランとグローバルカタログの共通部分になります。新しいモードを追加しても、テナントごとに手を入れる必要はありません。持っているプランにそのモードが含まれていれば、自動的に使えるようになります。
すべての呼び出しでの BYOK の注入
インフラを共有していても、BYOK の認証情報はそれを所有するテナントの範囲にとどまります。AI のリクエストはそれぞれ、同じデータフィルターでテナントのコンテキスト内の認証情報を解決するため、ストレージ層でテナント間にキーが漏れることはありえません。
あえてやらないこと
当社はデータベースやプロセスのレベルでテナントを分離しません。テナントごとのデータベースをスケールさせるコストは、マルチテナント SaaS 製品のユニットエコノミクスを壊してしまいます。初日からそのためにスキーマを設計しておけば、データフィルターとテナント単位のキャッシュで十分です。