Nedir?
Multi-tenant, tek bir uygulamanın birden fazla müşteriye (tenant) hizmet vermesi anlamına gelir. Her tenant kendi verilerini görür, ama altyapı paylaşılır.
SaaS ürünlerin temel mimari kararıdır. Notion, Slack, Linear — hepsi multi-tenant.
Tenant İzolasyon Yöntemleri
1. Database per Tenant
Her müşteri kendi veritabanına sahip. En güvenli ama en pahalı.
- ✓ Mutlak izolasyon
- ✓ Backup ve restore tenant bazında
- ✗ 100 müşteri = 100 DB → bakım maliyeti yüksek
2. Schema per Tenant
Tek DB içinde her tenant için ayrı şema. Orta yol.
3. Discriminator Column
Tüm veri tek tabloda, her satırda TenantId kolonu. En yaygın yaklaşım.
- ✓ Tek codebase, tek DB, kolay yönetim
- ✓ Yeni tenant 1 satırlık INSERT
- ✗ Yanlış WHERE → veri sızıntısı riski
Doğru Seçim Nasıl Yapılır?
Üç soruyu kendinize sorun:
- Regülasyon — sağlık, finans gibi sektörlerde mutlak izolasyon gerekebilir → DB per tenant
- Müşteri sayısı — yüzlerce ufak müşteri → Discriminator; az ama büyük müşteri → DB per tenant
- Performance — bir tenant'ın yükü diğerini etkilememeli → en azından şema ayrımı
Örnek: EF Core ile Discriminator Pattern
public class AppDbContext : DbContext
{
private readonly ITenantContext _tenant;
public AppDbContext(DbContextOptions opts, ITenantContext tenant) : base(opts)
{
_tenant = tenant;
}
protected override void OnModelCreating(ModelBuilder b)
{
b.Entity<Proje>()
.HasQueryFilter(p => p.TenantId == _tenant.TenantId);
}
}
HasQueryFilter tüm sorgulara otomatik WHERE TenantId = X ekler. Geliştirici unutsa bile EF Core hatırlatır.