Teknoloji

Küçük SaaS ve API Projeleri İçin Multi‑Tenant Veritabanı ve Hosting Rehberi

İçindekiler

Küçük SaaS ve API Projelerinde Multi‑Tenant Veritabanı Neden Kritik?

Küçük bir SaaS paneli ya da sadece birkaç endpoint’ten oluşan bir API geliştirirken ilk başta her şey basit görünür: tek veritabanı, tek uygulama, tek sunucu. Ancak ilk 5–10 müşteriden sonra aynı sorular dönmeye başlar: Müşteri verilerini nasıl izole edeceğiz? Her yeni müşteri için ayrı veritabanı mı açmalıyız? Tek veritabanı büyüdükçe performans ne olacak? Yedekleme ve kurtarma senaryolarında kimi, nasıl geri döndüreceğiz?

Multi‑tenant (çok kiracılı) veritabanı mimarisi tam bu noktada devreye girer. Aynı uygulama kod tabanını kullanarak onlarca veya yüzlerce müşteriyi, mümkün olduğunca az operasyonel yükle ve uygun maliyetle barındırmanızı sağlar. Ancak yanlış seçilen mimari, ileride veri taşıma, raporlama, ölçekleme ve güvenlik tarafında ciddi duvarlara çarpmanıza neden olabilir.

Bu yazıda DCHost ekibi olarak, küçük ve orta ölçekli SaaS ve API projeleri için pratikte işe yarayan multi‑tenant veritabanı yaklaşımlarını ve bunları hangi hosting mimarisi üzerinde çalıştırmanız gerektiğini adım adım ele alacağız. Daha önce SaaS uygulamalarında çok kiracılı mimari türlerini daha derinlemesine anlattığımız rehberde genel resmi çizmiştik; burada özellikle veritabanı ve barındırma tarafındaki somut karar noktalarına odaklanacağız.

Multi‑Tenant Veritabanı Nedir, Tekil Mimardan Farkı Ne?

Basitçe söylemek gerekirse multi‑tenant veritabanı mimarisi, birden fazla müşterinin (tenant’in) verisinin aynı veritabanı altyapısı üzerinde barındırıldığı ama mantıksal, güvenliksel ve çoğu zaman performans açısından birbirinden izole edildiği yapıdır.

Karşısında ise single‑tenant yaklaşım vardır: Her müşteri için ayrı veritabanı, hatta bazen tamamen ayrı sunucu kullanırsınız. Bu model izolasyon açısından güçlüdür ama küçük SaaS projeleri için:

  • Yönetmesi zor (her müşteri için ayrı şema güncellemesi, yedek planı, izleme),
  • Maliyeti yüksek (fazla sayıda veritabanı/sunucu),
  • Otomasyon gereksinimi ağır (provisioning, migration, versiyonlama)

Multi‑tenant model ise tam tersine:

  • Kaynakları paylaştırarak maliyeti azaltır,
  • Schema migration ve sürüm güncellemelerini tek yerden yürütmenizi sağlar,
  • Basit bir MVP’den yüzlerce müşteriye doğru büyümeyi daha yönetilebilir kılar.

Elbette her çok kiracılı mimari aynı değil. Küçük SaaS ve API projeleri için doğru modeli seçebilmek adına önce temel türleri netleştirelim.

Multi‑Tenant Veritabanı Mimarisi Türleri

1) Tek Veritabanı, Ortak Şema (Shared DB, Shared Schema)

En basit ve en sık kullanılan modeldir. Tüm müşterilerin verisi aynı veritabanındaki aynı tabloları paylaşır. Ayrımı sağlamak için her tabloya bir tenant_id veya company_id alanı eklersiniz.

Örnek tablo yapısı:

  • users(id, tenant_id, name, email, ...)
  • invoices(id, tenant_id, amount, status, ...)

Avantajları:

  • Basitlik: Tek şema, tek migration seti, tek bağlantı stringi.
  • Düşük maliyet: Küçük bir VPS veya orta seviye bir veritabanı sunucusu bile uzun süre yeter.
  • Merkezi raporlama: Tüm müşterileri kapsayan toplu raporlar yazmak çok kolay.

Dezavantajları:

  • İzolasyon: Kod tarafında tenant_id filtrelerini atlamak, yanlış join’ler yapmak veri sızıntısına yol açabilir.
  • Migration riski: Hatalı bir migration tüm müşterileri aynı anda etkiler.
  • Çok büyük tenant’lar: Bir müşterinin devasa verisi, diğer tüm müşterilerin performansını etkileyebilir.

Küçük SaaS ve API projelerinde MVP aşamasında en çok tercih ettiğimiz model budur. ISO 27001 gibi ağır uyumluluk gereklilikleri yoksa ve tek bir ülkede, orta ölçekli işletmelere hizmet veriyorsanız bu yaklaşım uzun süre iş görür.

2) Tek Veritabanı, Ayrı Şema (Shared DB, Isolated Schema)

Bu modelde tüm müşteriler aynı veritabanını paylaşır ama her müşterinin kendi şeması (schema) vardır. Örneğin:

  • tenant_123.users
  • tenant_456.users

Avantajları:

  • Daha iyi izolasyon: Yanlışlıkla tenant_123 ile tenant_456 verisini karıştırmak daha zordur, çünkü tamamen farklı şemalardadır.
  • Schema varyasyonları: Bazı büyük müşteriler için tablo yapısını hafifçe özelleştirmeniz gerektiğinde esneklik sağlar.

Dezavantajları:

  • Schema yönetimi: Her tenant için migration uygulamanız gerekir; bu da otomasyon ihtiyacını artırır.
  • Çoğalma: 500 müşteri → her tabloda 500 kopya anlamına gelir; yönetimsel karmaşıklık hızla artar.

Küçük SaaS’lerde bu model genellikle “ortak şema” modelini aşıp, ama her müşteri için ayrı veritabanına geçmeden önceki ara basamak olarak düşünülür. Çok müşterili bir CRM/ERP tarzı üründe birkaç kurumsal müşteriyi özelleştirmek için tercih edilebilir.

3) Her Müşteriye Ayrı Veritabanı (Database per Tenant)

Burada her müşteri için tamamen ayrı bir veritabanı (hatta bazen ayrı sunucu) açarsınız. Örneğin:

  • db_customer_1
  • db_customer_2

Avantajları:

  • Güçlü izolasyon: Bir veritabanı çökerse ya da migration’da sorun yaşarsa, sadece o müşteri etkilenir.
  • Farklı SLA’ler: Büyük müşterilere farklı yedekleme, replikasyon, donanım ve bakım pencereleri sunabilirsiniz.
  • Kolay taşıma: İsteyen müşterinin veritabanını alıp kendi altyapısına taşıması daha pratik olabilir.

Dezavantajları:

  • Operasyonel yük: Migration, şema versiyonlama, izleme ve yedekleme süreçleri çok kiracılı shared modellerden daha karmaşık hale gelir.
  • Maliyet: Çok sayıda küçük veritabanı, bağlantı sayıları ve bakım görevleri için ek kaynak ister.

Küçük SaaS ve API projelerinde bu mimariyi genellikle yalnızca çok büyük veya regulasyona tabi birkaç özel müşteri için kullanmayı öneriyoruz. Geri kalan kitle ortak veritabanında tutulup, seçili müşterilere “dedicated veritabanı” opsiyonu sunmak dengeli bir çözümdür.

4) Hibrit Modeller: Büyükler Ayrı, Küçükler Ortak

Gerçek hayatta çoğu SaaS ürünü tek bir modele sıkışmak zorunda kalmaz. Örneğin:

  • Standart paket müşterileri: Ortak veritabanı + ortak şema.
  • Kurumsal paket müşterileri: Ayrı veritabanı veya ayrı şema.

Böylece:

  • Erken aşamada tek veritabanı ile hız ve maliyet avantajı kazanırsınız,
  • Büyüdükçe problem çıkaran veya ayrı SLA isteyen müşterileri kademeli olarak ayırırsınız.

Hibrit yaklaşımı kurgularken, ileride taşıma operasyonlarını da düşünmek gerekir. Özellikle ortak veritabanındaki belirli bir tenant’ı alıp ayrı bir veritabanına taşımak için kimlik alanları, foreign key yapıları ve tutarlı bir yedek stratejiniz olmalıdır.

Küçük SaaS ve API Projeleri İçin Doğru Mimarinin Seçimi

Teoride mimari türlerini bilmek yeterli değil; hangi aşamada hangi modeli seçmeniz gerektiğini netleştirmek kritik. Daha önce küçük SaaS uygulamaları için doğru hosting mimarisini seçmeye odaklanan yazımızda altyapı perspektifini anlattık; burada veritabanı tarafıyla birleştirelim.

Aşama 1: MVP ve İlk 10–20 Müşteri

  • Önerilen veritabanı modeli: Tek veritabanı, ortak şema (shared schema).
  • Hedef: Hızlı geliştirme, minimum operasyonel yük.
  • Tipik kullanım: SaaS faturalama, basit CRM, küçük ölçekte raporlama paneli, webhook tüketen API’ler.

Bu aşamada karmaşık şema varyasyonları ya da per-tenant veritabanı genellikle gereksizdir. Önemli olan:

  • Tüm tablolarda tutarlı bir tenant_id alanı olması,
  • SQL sorgularının her zaman tenant filtresiyle yazılması,
  • Index’lerin tenant bazlı sorguları destekleyecek şekilde tasarlanmasıdır.

Aşama 2: 50–200 Müşteri ve Artan Yük

Bu noktada bazı müşteriler:

  • Daha yoğun kullanım yapmaya,
  • Diğerlerinden çok daha fazla veri üretmeye,
  • Daha sert SLA ve performans beklentileriyle gelmeye

başlar.

Bu aşamada:

  • Genel kitle için yine tek veritabanı + ortak şema kullanılabilir.
  • Çok büyük veya regülasyonlu birkaç müşteri için ayrı veritabanı veya ayrı şema opsiyonu sunulabilir.

Burada önemli olan, kod tabanının baştan per‑tenant bağlantı ya da “tenant context” kavramına hazırlanmış olmasıdır. Örneğin:

  • Node.js’te request context’ine tenant bilgisini en başta eklemek,
  • Laravel’de global scope veya middleware ile tenant filtreleri uygulamak,
  • Veritabanı bağlantılarını tenant’a göre seçilebilir kılmak.

Aşama 3: Kurumsal Müşteriler, Coğrafi Yayılım ve Uyumluluk

Eğer ürününüz daha kurumsal segmente açıldıysa ya da birden fazla ülkede veri barındırma (veri yerelleştirme) zorunluluğu doğduysa, mimariyi şu eksenlerde düşünmeniz gerekir:

  • Bazı müşteriler için tamamen ayrı veritabanı,
  • Gerekiyorsa ayrı VPS veya dedicated veritabanı sunucusu,
  • Coğrafi olarak farklı veri merkezlerinde (örneğin Türkiye ve Avrupa) dağıtık barındırma.

Bu aşamada veritabanı tasarımı tek başına yetmez; replikasyon, yedekleme ve felaket kurtarma stratejilerini de birlikte düşünmek gerekir. DCHost olarak bu tür senaryolarda çoğu zaman veritabanını ayrı sunuculara taşıma, gerektiğinde replikalar ekleme ve colocation/dedicated sunucu kombinasyonları tasarlıyoruz.

Veritabanı Tasarım Detayları: İzolasyon, Güvenlik ve Performans

Tenant Kimliği ve Satır Bazlı İzolasyon

Ortak şema kullandığınızda, her tablonun tenant bazında ayrılması için birkaç temel prensip hayati önem taşır:

  • Tüm iş verisi tablolarında zorunlu tenant_id alanı olmalı.
  • tenant_id genellikle integer ya da UUID olarak tutulabilir; tüm tabloda tutarlı tip kullanın.
  • Tüm sorgular, ilişkiler ve join’ler tenant filtresiyle yazılmalı; ORM seviyesinde global filtre kullanmak bu riski azaltır.

PostgreSQL kullanıyorsanız Row Level Security (RLS) ile her tenant için otomatik satır bazlı güvenlik sağlayabilirsiniz. MySQL/MariaDB tarafında ise genellikle uygulama katmanındaki filtrelere güvenirsiniz; bu yüzden test ve code review süreçlerinde tenant izolasyonu özel olarak kontrol edilmelidir.

Index Tasarımı: tenant_id + Sık Kullanılan Alanlar

Multi‑tenant veritabanında index tasarlarken klasik sorgu kalıplarını düşünün:

  • SELECT ... FROM invoices WHERE tenant_id = ? AND created_at > ?
  • SELECT ... FROM users WHERE tenant_id = ? AND email = ?

Bu sorgular için tipik index desenleri:

  • INDEX invoices_tenant_created_at (tenant_id, created_at)
  • UNIQUE INDEX users_tenant_email (tenant_id, email)

Böylece:

  • Her tenant’ın verisi index içinde gruplanır,
  • Hem performans, hem de benzersizlik kontrolleri tenant bazında yapılır.

Ortak veritabanında en sık yapılan hata, indexleri sadece email veya sadece created_at gibi alanlara kurup tenant_id’yi gözden kaçırmaktır. Bu durumda küçük SaaS projeleri bile birkaç yüz bin kayıt sonrası beklenmedik yavaşlamalar yaşamaya başlar.

Şema Değişiklikleri (Migration) ve Geri Alma Stratejisi

Multi‑tenant veritabanında her migration, aslında tüm müşterilere yansıyacak bir değişikliktir. Bu yüzden:

  • Migration’ları önce staging ortamında, örnek tenant verileriyle test edin.
  • Mümkünse idempotent ve geri alınabilir değişiklikler yapın (sütun drop etmek yerine önce kullanımını sonlandırma gibi).
  • Canlıda çalıştırmadan önce otomatik yedek alın ve geri dönüş (rollback) planınızı yazılı hale getirin.

Daha büyük yapılarda MySQL tarafında online şema değiştirme araçları (örneğin gh-ost, pt-online-schema-change) hayat kurtarabilir. DCHost altyapısında yüksek trafik alan veritabanları için bu tür araçlarla neredeyse sıfır kesintiyle tablo değişiklikleri yapan pek çok müşteri görüyoruz.

Gizlilik ve Uyumluluk: Tenant Bazlı Yedek ve Silme

KVKK/GDPR gibi regülasyonlar söz konusuysa, multi‑tenant veritabanında şu sorulara önceden cevap vermeniz gerekir:

  • Belirli bir tenant’ın verisi talep edildiğinde, onu mantıklı sürede nasıl silebilirsiniz?
  • Yedeklerdeki veriler için ne kadar geriye dönük saklama yapacaksınız?
  • Yedeklerden tek bir tenant’ı seçerek geri dönmek mümkün mü, yoksa tüm veritabanını mı dönmeniz gerekiyor?

Bu başlık, doğrudan çok kiracılı SaaS veri politikalarıyla ilişkilidir. Detaylı bir yol haritası için SaaS uygulamalarında müşteri verisi yedekleme ve veri saklama politikalarına odaklanan makalemize mutlaka göz atmanızı öneririm.

Hosting Mimarisi: Multi‑Tenant Veritabanını Nereye Koymalı?

Veritabanı modelini netleştirdikten sonra kritik soru şu: Bu yapıyı hangi hosting mimarisinde çalıştıracağız? DCHost olarak sıkça gördüğümüz birkaç temel desen var.

1) Tek VPS Üzerinde Uygulama + Veritabanı

Küçük SaaS ve API projeleri için başlangıçta en pratik ve ekonomik model, tek bir güçlü VPS üzerinde hem uygulamayı hem veritabanını barındırmaktır. Özellikle:

  • Aktif kullanıcı sayısının düşük olduğu,
  • Arka planda yoğun batch işlerin çalışmadığı,
  • Veri hacminin birkaç on GB seviyesini geçmediği

senaryolarda gayet yeterlidir.

Bu modelde dikkat edilmesi gerekenler:

  • Veritabanı için ayrı bir disk veya en azından ayrı bir dizin (örneğin NVMe depolama) kullanmak,
  • Uygulama ve veritabanı kullanıcılarını işletim sistemi seviyesinde ayırmak,
  • Düzenli otomatik yedekleri farklı bir DCHost sunucusuna veya obje depolama alanına kopyalamak.

Bu yaklaşım, ilk 20–50 müşteri için genellikle sorunsuz ilerler. Darboğazlar oluşmaya başladığında ölçeği büyütmek yerine, bir sonraki adıma geçmek daha doğrudur.

2) Ayrı Veritabanı Sunucusuna Geçmek

Uygulama tarafı CPU ağırlıklı iş yapıyor, veritabanı da giderek IO ağırlıklı hale geliyorsa, klasik çözüm uygulama ve veritabanını farklı sunuculara ayırmaktır. Bunu doğru zamanlamak için veritabanı sunucusunu uygulama sunucusundan ayırmanın ne zaman mantıklı olduğuna dair yazımızda detaylı sinyaller paylaşmıştık.

Tipik model şöyle olur:

  • 1 adet DCHost VPS: API/SaaS uygulaması, kuyruk işleri, cron’lar.
  • 1 adet DCHost VPS (daha yüksek RAM ve NVMe ağırlıklı): Sadece veritabanı.

Avantajları:

  • Veritabanının CPU, RAM ve disk kaynaklarını bağımsız ölçekleyebilirsiniz.
  • Bakım, yedek ve güvenlik ayarlarını veritabanı sunucusunda çok daha sıkı tutabilirsiniz.
  • Uygulama sunucuları gerektiğinde yatay olarak çoğaltılabilir (load balancer arkasında).

3) Çok VPS’li Mimari, Replikasyon ve Yüksek Erişilebilirlik

Müşteri sayınız ve iş kritikliği arttıkça hedef sadece performans değil, yüksek erişilebilirlik olur. Bu noktada:

  • Bir primary (yazma) veritabanı,
  • Bir veya daha fazla read replica (okuma) veritabanı

ile çalışan bir mimari kurmak mantıklıdır. Böylece:

  • Raporlama ve ağır SELECT sorgularını replica’lara kaydırabilirsiniz.
  • Primary sunucuda sorun çıktığında hızlıca replica’yı yeni primary yapacak bir planınız olur.

MySQL/MariaDB veya PostgreSQL tarafında temel replikasyon kurulum adımlarını ve dikkat etmeniz gereken noktaları MySQL ve PostgreSQL replikasyonuyla yüksek erişilebilirlik kurulumunu anlattığımız rehberde detaylı şekilde işledik. Multi‑tenant veritabanı ile birlikte kullanıldığında, özellikle okuma ağırlıklı SaaS panellerinde ciddi nefes aldırır.

Operasyonel Konular: Yedekleme, Deploy ve Tenant Taşıma

Yedekleme Stratejisi: Tüm DB mi, Tenant Bazlı mı?

Multi‑tenant veritabanı için yedekleme stratejisi tasarlarken şu soruları mutlaka masaya koyun:

  • Kaç günde bir tam yedek (full backup) alacağız?
  • Aradaki saatlik/günlük artımlı yedeklerle (incremental) ne kadar veri kaybını tolere edebiliyoruz (RPO)?
  • Bir hata olduğunda, tüm veritabanını mı, yoksa tek bir tenant’ı mı geri getirmemiz gerekiyor?

Küçük SaaS projelerinde çoğu zaman pratik çözüm:

  • Belirli periyotlarda tam veritabanı yedeği,
  • Olası sorunlu migration veya büyük kod dağıtımlarından hemen önce ekstra yedek,
  • Yedeklerin farklı bir DCHost sunucusunda veya obje depolamada, şifreli ve sürümlü olarak saklanmasıdır.

Zero‑Downtime Dağıtım ve Şema Değişiklikleri

Multi‑tenant mimaride kod dağıtımı ve veritabanı migration’ları çoğu zaman çalışma saatlerine denk gelir; çünkü müşterileriniz farklı zaman dilimlerinde veya 7/24 aktif olabilir. Bu nedenle:

  • Mümkün olduğunca geriye uyumlu migration’lar tasarlayın (önce yeni sütunu ekle, kodu yeni sütunu kullanacak şekilde güncelle, sonra eski sütunu kaldır).
  • Uygulama sunucularında blue‑green veya rolling deployment kullanın; böylece kısa migration sürelerinde bile kesinti yaşamazsınız.
  • Veritabanı kilitlenmelerini (lock) azaltmak için büyük tablo değişikliklerini düşük trafikli saatlere planlayın.

Belirli Bir Tenant’ı Taşımak: Ortak DB’den Ayrı Veritabanına

Büyüyen SaaS projelerinde sıklıkla şu senaryo yaşanır: “X müşterisi çok büyüdü, veritabanını diğerlerinden ayırmak istiyoruz.” Bunu baştan öngörmek için:

  • Tüm ilişkilendirmelerin tenant_id üzerinden yapılmasına dikkat edin.
  • Migration ve yedek script’lerinizi tek bir tenant’ı filtreleyerek export/import yapabilecek şekilde tasarlayın.
  • DNS ve uygulama tarafında, belirli tenant’lar için farklı veritabanı bağlantılarını yönetebileceğiniz bir yapı kurun.

Böylece ortak veritabanında sorun yaşatmaya başlayan büyük bir müşteriyi ayrı bir DCHost veritabanı sunucusuna taşımak, günler süren bir kabus olmaktan çıkar; planlı bir bakım penceresinde yönetilebilir hale gelir.

DCHost Üzerinde Pratik Mimari Önerileri

Teoriyi somutlaştırmak için DCHost altyapısında sık gördüğümüz üç senaryoyu özetleyelim.

Senaryo 1: Yeni Başlayan Küçük SaaS / API (MVP)

  • Veritabanı modeli: Tek veritabanı, ortak şema.
  • Hosting: 1 adet DCHost VPS (uygulama + veritabanı aynı sunucuda).
  • Önemli noktalar:
    • Disk tarafında mümkünse NVMe tercih edin.
    • Günlük otomatik veritabanı yedeği alın, yedekleri farklı bir lokasyonda tutun.
    • Erken aşamadan itibaren tüm sorguları tenant_id filtresiyle yazın.

Senaryo 2: Büyüyen SaaS, Artan Trafik ve Müşteri Sayısı

  • Veritabanı modeli: Çoğunluk için ortak şema, birkaç kurumsal müşteri için ayrı veritabanı.
  • Hosting:
    • 1–2 adet DCHost VPS (uygulama sunucuları, gerekirse load balancer arkasında),
    • 1 adet DCHost VPS (sadece veritabanı, daha yüksek RAM ve disk IO kapasitesiyle).
  • Önemli noktalar:
    • ORM veya bağlantı katmanında tenant’a göre farklı veritabanı seçebilecek altyapı kurun.
    • Okuma yükü artmaya başlarsa bir read replica eklemeyi planlayın.
    • Monitoring (CPU, RAM, disk IO, slow query log) kurulumunu ihmal etmeyin.

Senaryo 3: Kurumsal Müşteriler ve Yüksek Erişilebilirlik

  • Veritabanı modeli: Büyük müşteriler için ayrı veritabanı, gerekirse ayrı veritabanı sunucuları.
  • Hosting:
    • Birden fazla DCHost VPS veya dedicated sunucu (uygulama katmanı için),
    • Primary + replica veritabanı sunucuları, gerekiyorsa coğrafi olarak farklı veri merkezlerinde,
    • Kritik projeler için DCHost colocation hizmetiyle kendi fiziksel sunucularınızı barındırma.
  • Önemli noktalar:
    • Failover senaryolarını düzenli olarak test edin.
    • Felaket kurtarma (DR) planınızda RTO/RPO hedeflerinizi netleştirin.
    • Veri yerelleştirme ve uyumluluk gerekliliklerine göre veri merkezi lokasyonunu dikkatle seçin.

API Katmanı ve Rate Limiting’i Unutmamak

Multi‑tenant veritabanınız ne kadar iyi olursa olsun, API katmanında tek bir müşterinin tüm kaynakları tüketmesini önlemezseniz, diğer tenant’lar için de performans düşer. Bu yüzden:

  • Her tenant için rate limiting (istek sayısı kısıtlama) uygulamak,
  • Arka planda çalışacak ağır raporlamaları kuyruk sistemine atmak,
  • API anahtarlarını (API key, token) sıkı bir şekilde yönetmek

kritik önem taşır. Bu konuda Nginx ve Redis tabanlı çözümlerle neler yapabileceğinizi görmek için API ve mikroservisler için rate limiting stratejilerini anlattığımız rehbere göz atabilirsiniz.

Özet ve Sonraki Adımlar

Küçük SaaS ve API projelerinde multi‑tenant veritabanı mimarisini doğru kurgulamak, ilk günden “enterprise” karmaşıklığına girmek anlamına gelmiyor. Aksine, basit ama doğru temellerle başlarsanız:

  • Tek VPS üzerinde giderken bile onlarca müşteriye rahatça hizmet verebilir,
  • Büyüdükçe veritabanını ayrı bir DCHost VPS’e taşıyıp, replica ekleyerek ölçekleyebilir,
  • Çok büyüyen müşterileri ayrı veritabanlarına ya da dedicated sunuculara sorunsuz biçimde ayırabilirsiniz.

Bu yolculukta kritik olan:

  • Başta doğru multi‑tenant modeli seçmek (genelde ortak şema ile başlamak),
  • tenant_id odaklı tasarım ve sağlam index’ler kurmak,
  • Yedekleme, replikasyon ve felaket kurtarma planlarını kağıt üzerinde değil, gerçek testlerle doğrulamaktır.

Eğer “Bizim SaaS şu an 20 müşteride, ama 200’e gittiğimizde ne olacak?” sorusunu kafanızdan atmak istiyorsanız, mevcut yapınızı birlikte değerlendirebiliriz. DCHost olarak veritabanı mimarisi, VPS/dedicated plan seçimi ve colocation senaryolarında hem teknik hem operasyonel tarafta yanınızdayız.

Çok kiracılı mimarinizi ve hosting altyapınızı birlikte planlamak için, DCHost destek ekibine projeyi kısaca özetleyen bir mesaj göndermeniz yeterli. Mevcut durumu, büyüme hedeflerinizi ve regulasyon gerekliliklerinizi bilmemiz, sizin için en dengeli multi‑tenant veritabanı ve hosting mimarisini tasarlamamız için fazlasıyla yeterli olacaktır.

Sıkça Sorulan Sorular

Her müşteriye ayrı veritabanı vermek izolasyon açısından çok güçlü ama küçük SaaS projeleri için genellikle gereğinden pahalı ve operasyonel olarak yorucu bir yaklaşım. Her bir veritabanı için ayrı migration, yedek, izleme ve bakım süreci yürütmeniz gerekir. İlk aşamada tek veritabanı + ortak şema ile başlayıp, yalnızca gerçekten büyüyen veya özel uyumluluk talep eden müşterileri ayrı veritabanına taşımak çoğu zaman daha mantıklıdır. Böylece hem maliyetleri kontrol altında tutar, hem de operasyonu yönetilebilir seviyede tutarsınız. DCHost altyapısında da genellikle bu hibrit yaklaşımla ilerliyoruz.

İlk adım, tüm tablolarda tutarlı bir tenant_id alanı kullanmak ve sorguların neredeyse tamamında bu alanı filtre olarak geçmek. Ardından, sık kullanılan sorgular için tenant_id ile birlikte kullanılan alanlara (örneğin created_at, email, status) birleşik index’ler tanımlamak performans açısından kritik. Büyük tablolar için zaman bazlı veya tenant bazlı partitioning de düşünülebilir. Ayrıca slow query log’u açarak yavaş sorguları düzenli analiz etmek, gerektiğinde sorguları sadeleştirmek ve cache (Redis gibi) ile okunabilir veriyi önbelleğe almak da çok işe yarar. Kaynak tarafında ise yeterli RAM ve hızlı NVMe disk tercih etmek büyük fark yaratır.

Erken aşamadaki çoğu SaaS ve API projesi için iyi boyutlandırılmış tek bir DCHost VPS üzerinde hem uygulama hem veritabanını çalıştırmak gayet yeterli oluyor. Trafik ve veri hacmi arttıkça veritabanını ayrı bir DCHost VPS’e taşımak, uygulama için bir veya daha fazla ayrı VPS kullanmak, hatta kritik iş yükleri için dedicated sunucu ya da colocation’a geçmek doğal bir ilerleme yolu. Eğer çok sayıda müşteriye hizmet verecek, yüksek erişilebilirlik ve replikasyon isteyen bir mimariniz varsa, veritabanı için ayrı primary/replica sunucular planlamak en sağlıklı çözüm. Projenizin ölçeğine göre birlikte net bir kapasite planı çıkarabiliriz.

Önce hedef modeli netleştirmek gerekiyor: Ortak şemalı tek veritabanı mı, yoksa hibrit (bazıları ayrı veritabanı) bir yapı mı istiyorsunuz? Ardından mevcut tablolara tenant_id ekleyip, tüm sorguları ve ORM katmanını bu alanı zorunlu kullanacak şekilde güncellemek temel adım. Veri taşıma tarafında, mevcut her veritabanını hedef sistemdeki tenant kimliğiyle eşleştirip, script’lerle import etmek genellikle en güvenli yöntem. Geçişi tek seferde bütün müşteriler için yapmak zorunda değilsiniz; önce birkaç düşük riskli müşteriyle pilot geçiş yapıp, sorunları görüp süreçleri iyileştirdikten sonra geri kalanları sırayla taşımanız daha kontrollü bir yaklaşım olacaktır.