Skip to content

멀티 테넌트 아키텍처

Commander는 모든 계층에서 멀티 테넌트 격리를 지원합니다.

요청 흐름

Request → HttpServer

           ├─ authenticate()           ← Bearer → 테넌트 매핑
           ├─ resolveTenantFromAuth()  ← API key → tenantId

           └─ execute({ tenantId }) → AgentRuntime

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

                                        ├─ Rate limit check     → TENANT_RATE_LIMIT
                                        ├─ Concurrency check    → TENANT_CONCURRENCY_LIMIT

                                        └─ 테넌트 스코프 인스턴스:
                                            ├─ SamplesStore(path/tenant_{id}/)
                                            ├─ TraceStore(path/tenant_{id}/)
                                            ├─ StateCheckpointer(path/tenant_{id}/)
                                            ├─ ThreeLayerMemory(per-instance)
                                            └─ ToolResultCache(key = SHA256(tenantId + tool + args))

격리 계층

계층메커니즘
Rate limits테넌트별 분당 요청
Concurrency테넌트별 최대 동시 런
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"
# 테넌트 매핑은 서버 설정 / TENANT_PROVIDER 에 따름
npx tsx packages/core/src/cliEntry.ts doctor
curl -s http://localhost:4000/health/detailed

로컬 CLI 단일 머신 개발은 보통 NullTenantProvider로 충분합니다. 프로덕션 SaaS·공유 클러스터에서는 Simple(또는 커스텀) 프로바이더와 쿼터를 켜세요.

관련

MIT — 멀티 에이전트 오케스트레이션을 위해.