SaaS

Multi-Tenant Mimari Tasarımı

03 Nov 2025
5 dakika okuma
İninia Teknoloji
22
0

Multi-tenant mimari, tek bir uygulama instance'ının birden fazla müşteriyi (tenant) izole olarak servis etmesidir. SaaS uygulamalarının temel mimari yaklaşımı olan multi-tenancy, ölçeklenebilirlik ve maliyet verimliliği sağlar.

Tenancy Modelleri

1. Shared Database, Shared Schema

tenants: id, name, subdomain
users: id, tenant_id, email
products: id, tenant_id, name

-- Query
SELECT * FROM products WHERE tenant_id = 123
  • ✅ En düşük maliyet
  • ✅ Kolay yönetim
  • ❌ İzolasyon riski
  • ❌ Noisy neighbor

2. Shared Database, Separate Schema

tenant_123.users
tenant_123.products
tenant_456.users
tenant_456.products
  • ✅ Orta düzey izolasyon
  • ✅ Per-tenant backup
  • ❌ Schema migration karmaşıklığı

3. Separate Database

db_tenant_123: users, products
db_tenant_456: users, products
  • ✅ Tam izolasyon
  • ✅ Per-tenant scaling
  • ❌ En yüksek maliyet
  • ❌ Yönetim karmaşıklığı

Tenant İdentifikasyonu

Subdomain

tenant1.app.com
tenant2.app.com

// Laravel middleware
$tenant = Tenant::where("subdomain", $request->getHost())->first();

URL Path

app.com/tenant1/dashboard
app.com/tenant2/dashboard

Request Header

X-Tenant-ID: 123

Veri İzolasyonu

Global Scope (Laravel)

class TenantScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where("tenant_id", auth()->user()->tenant_id);
    }
}

// Model
protected static function booted()
{
    static::addGlobalScope(new TenantScope);
}

Row-Level Security (PostgreSQL)

CREATE POLICY tenant_isolation ON products
    USING (tenant_id = current_setting("app.current_tenant")::int);

Configuration

  • Tenant-specific settings
  • Feature flags per tenant
  • Custom branding (logo, colors)
  • Domain/subdomain mapping

Performans

Caching

// Redis key prefix
cache()->tags(["tenant:{$tenantId}"])->put($key, $value);

Job Queue

// Tenant context korunmalı
dispatch(new ProcessOrder($order)->onQueue("tenant-{$tenantId}"));

Güvenlik

  • Tenant context her request'te doğrula
  • Cross-tenant data access önleme
  • API rate limiting per tenant
  • Audit logging

Scaling

  • Shard by tenant_id
  • Separate infrastructure for large tenants
  • Read replicas per region
  • Caching layer (Redis Cluster)

Laravel Paketleri

  • spatie/laravel-multitenancy
  • stancl/tenancy

Testing

// Her test tenant context'inde çalışmalı
public function test_user_can_only_see_own_tenant_products()
{
    $tenant1 = Tenant::factory()->create();
    $tenant2 = Tenant::factory()->create();
    
    $product1 = Product::factory()->for($tenant1)->create();
    $product2 = Product::factory()->for($tenant2)->create();
    
    $this->actingAs($tenant1->users->first())
         ->get("/products")
         ->assertSee($product1->name)
         ->assertDontSee($product2->name);
}

Multi-tenant mimari, SaaS'ın temel yapı taşıdır. Doğru model seçimi ve implementasyonla ölçeklenebilir, güvenli sistemler inşa edin.

Bu konuda bir yazılım projesi mi planlıyorsunuz?

Projenizi birlikte analiz edip teknik yol haritasını çıkarabiliriz. Ücretsiz keşif görüşmesi için hemen yazın.

İninia Teknoloji

İstanbul Teknik Üniversitesi ARI Teknokent'te kurulu Ininia Teknoloji, 12+ yıllık deneyimle AR/VR, yapay zeka ve mobil uygulama alanlarında yenilikçi çözümler sunmaktadır.

Projeniz için profesyonel destek mi arıyorsunuz?

12+ yıllık deneyimimizle dijital dönüşümünüzü hızlandıralım.

Ücretsiz Görüşme Talep Et