Yeni proje teklifleri kabul ediliyor +90 505 113 90 33 / muhammetelma24@gmail.com
Ana Sayfa/ Blog/Sistem Tasarımı
Sistem Tasarımı 15 Aralık 2024 8 dk okuma

Multi-Tenant Mimari Nedir?

Tek codebase, birden fazla müşteri: SaaS panelleri için tenant izolasyon yöntemleri.

[ Kapak görseli — Multi-Tenant Mimari Nedir? ]

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:

  1. Regülasyon — sağlık, finans gibi sektörlerde mutlak izolasyon gerekebilir → DB per tenant
  2. Müşteri sayısı — yüzlerce ufak müşteri → Discriminator; az ama büyük müşteri → DB per tenant
  3. 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.

Güvenlik notu Multi-tenant projede en sık yapılan hata: bir endpoint'in tenant filtresini unutması. Pen-test sırasında bu açık her zaman çıkar. Bu yüzden global query filter şart — manuel filtreye güvenmeyin.
← Önceki Yazı

JWT Authentication Adım Adım

ASP.NET Core · 28 Aralık 2024
Sonraki Yazı →

SEO için Server Side Rendering Önemi

Rehber · 02 Aralık 2024
İlgili Yazılar

Bunlar da ilgini çekebilir.

Yazıyı beğendin mi?

Benzer içeriklerden haberdar olmak veya bir proje konuşmak için ulaş.