Skip to main content
  1. References/
  2. Architecture Design Basics/
  3. Pattern Taxonomy/
  4. Domain-Specific Patterns/

Multi-tenancy Patterns

·· 212 words· 1 min

🟠 P1 — directly relevant to Stripe (multi-tenant SaaS platform)

Problem #

Your platform serves many customers (tenants). Each tenant’s data must be isolated, performance must be fair, and one tenant’s load must not degrade others’ experience.

Isolation Strategies #

StrategyData isolationPerformance isolationOperational cost
Shared everythingTenant ID column on every tableNoisy neighbour riskLowest
Schema-per-tenantSeparate schema, shared DBBetter isolationMedium
Database-per-tenantSeparate database instanceStrong isolationHighest
HybridShared default, dedicated for large tenantsBalancedMedium-High

Noisy Neighbour Problem #

One tenant running expensive queries or high write volume degrades performance for all tenants on the same infrastructure.

Mitigations:

  • Per-tenant rate limiting: Cap requests/resources per tenant (see also: Rate Limiting)
  • Resource quotas: CPU, memory, I/O limits per tenant
  • Query governors: Kill queries that exceed time/resource thresholds
  • Tenant-aware routing: Route large tenants to dedicated resources

Instinct #

Start with shared-everything + tenant ID + per-tenant rate limiting. It’s the simplest to operate. Only move to schema-per-tenant or database-per-tenant when you have tenants whose isolation requirements (regulatory, SLA, or scale) justify the operational cost. Stripe’s model: shared infrastructure with sophisticated per-merchant rate limiting and resource isolation.

References #