Multi Tenant Saas Database Tenancy Patterns (çok Kiracılı Saas Desenleri)

1 minute read

En genel hatları itibariyle 3 farklı opsiyon var :

  • Separate Databases
  • Shared Database , Separate Schemas
  • Shared Database, Shared Schema

Avantajları:

  1. Separate Databases
    1. Tam veri izolasyonu
    2. Her veritabanını ayrı ayrı backuplama, restore edebilme kolaylığı
  2. Shared Database, Separate Schemas
    1. Tek bir veritabanı olduğu için maliyet düşük
    2. “Shared Database, Shared Schema”’e oranla veri izolasyonu daha iyi düzeyde.
    3. Farklı veritabanlarına bağlanıp veri çekmek yerine tek bir veritabanından veri alınabiliyor olması.Application seviyesinde işleri kolaylaştırıyor.
  3. Shared Database, Shared Schema
    1. Maliyet minimal düzeyde.
    2. Tek bir veritabanı ve tek bir şema kullanıldığı için CRUD işlemlerinde ekstra spesifikasyonlar diğerlerine göre oldukça az. Application seviyesinde ciddi kolaylık sağlıyor.

Dezavantajları:

  1. Separate Databases
    1. Yüksek sunucu maliyeti
    2. Her veritabanına bağlanıp veri aggregate etmenin application seviyesinde zorluk ve maliyetleri olabilir.
  2. Shared Database, Separate Schemas
    1. Tam veri izolasyonu yok.
    2. DB backup ve restore işlemleri biraz problematik. Tüm tenant’lar aynı veritabanında olduğundan ayrı ayrı backuplayıp restore etme şansımız yok. Veritabanını tümden backuplayıp tümden restore edebiliyoruz. Bu da backup veya restore edilmesine gerek olmayan verilerin de aynı işleme tabi tutulup maliyetin artması demek. NOT: Alınan db backup’ı ayrı bir environment’ta restore edildikten sonra, istenilen tablolar seçilerek canlı sistemde ayrı ayrı restore edilebilir. Fakat bu da ekstra zaman ve maliyet getiren bir işlemdir.
  3. Shared Database, Shared Schema
    1. Veri izolasyonu yok. Satırlar birbirinden tenant_id’ler ile ayırt ediliyor.
    2. Güvenlik açığının en fazla olduğu desendir. Application seviyesinde ciddi önlemler alınmalıdır.
    3. Backup olayıyla alakalı “Shared Database, Separate Schemas” için söz konusu olan sıkıntılar ve belki biraz daha fazlası bu desen için de geçerlidir. Tüm veriler backuplanmakta ve tüm veriler restore edilmektedir. Sadece belirli tenand_id’ye sahip verilerin restore edilmesi için ekstra script yazılmalıdır.

Kaynaklar

https://docs.microsoft.com/tr-tr/azure/sql-database/saas-tenancy-app-design-patterns

https://vladmihalcea.com/database-multitenancy/

https://stackoverflow.com/questions/5570102/how-to-design-a-multi-tenant-mysql-database

https://blog.ramdoot.in/introducing-multitenancy-upgrade-your-web-application-acb47ab90c30

https://blog.ramdoot.in/tenant-identification-in-a-multitenant-web-application-370b5d240810

Updated:

Leave a comment