Skip to content

マルチテナント・アーキテクチャ

Commander は すべての層 でマルチテナント隔離をサポートします。

リクエストフロー

Request → HttpServer

           ├─ authenticate()           ← Bearer → テナント対応
           ├─ resolveTenantFromAuth()  ← API key → tenantId

           └─ execute({ tenantId }) → AgentRuntime

                                        ├─ TenantProvider.getTenantConfig(tenantId)
                                        │   → tokenBudget, maxConcurrency, maxRunsPerMinute

                                        ├─ Rate limit / Concurrency チェック

                                        └─ テナントスコープ:
                                            SamplesStore / TraceStore / StateCheckpointer
                                            ThreeLayerMemory / ToolResultCache(tenantId 込み)

隔離レイヤ

仕組み
Rate limitsテナントごとの分あたりリクエスト
Concurrencyテナントごとの最大同時 run
Storageテナント別ディレクトリ
Memoryインスタンス別 ThreeLayerMemory
Cacheキーに tenantId(SHA-256)
Metricsすべてに tenant ラベル

プロバイダー

プロバイダー動作
NullTenantProvider隔離なし(単一テナント互換)
SimpleTenantProvidertenant → config の静的マップ

TenantConfig

typescript
interface TenantConfig {
  tenantId: string;
  tokenBudget: number;
  maxConcurrency: number;
  maxRunsPerMinute: number;
  enabled: boolean;
  workspacePath?: string;
}

運用

bash
export COMMANDER_API_KEY="long-random-secret"
npx tsx packages/core/src/cliEntry.ts doctor
curl -s http://localhost:4000/health/detailed

ローカル単機 CLI は多くの場合 NullTenantProvider で十分。本番の共有クラスタでは Simple(またはカスタム)とクォータを有効にしてください。

関連

MIT — マルチエージェント編成のために。