Çok kiracılı SaaS veritabanı kiracı desenleri

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu makalede, çok kiracılı bir SaaS uygulaması için kullanılabilen çeşitli kiracı modelleri açıklanmaktadır.

Çok kiracılı bir SaaS uygulaması tasarlarken, uygulamanızın gereksinimlerine en uygun kiracı modelini dikkatle seçmeniz gerekir. Kiracı modeli, her kiracının verilerinin depolamaya nasıl eşleneceğini belirler. Kiracı modeli seçiminiz uygulama tasarımını ve yönetimini etkiler. Daha sonra farklı bir modele geçmek bazen maliyetli olabilir.

A. SaaS kavramları ve terminolojisi

Hizmet Olarak Yazılım (SaaS) modelinde şirketiniz yazılımınıza lisans satmaz. Bunun yerine, her müşteri şirketinize kira ödemeleri yapar ve her müşteriyi şirketinizin kiracısı yapar.

Kira ödeme karşılığında, her kiracı SaaS uygulama bileşenlerinize erişim alır ve verilerini SaaS sisteminde depolar.

Kiracı modeli terimi kiracıların depolanan verilerinin nasıl düzenlendiğinden sorumludur:

  • Tek kiracılı: Her veritabanı yalnızca bir kiracıdan veri depolar.
  • Çok kiracılı: Her veritabanı birden çok ayrı kiracıdan (veri gizliliğini koruma mekanizmalarıyla) verileri depolar.
  • Hibrit kiracı modelleri de mevcuttur.

B. Uygun kiracı modelini seçme

Kiracı modeli genel olarak bir uygulamanın işlevini etkilemez, ancak büyük olasılıkla genel çözümün diğer yönlerini etkiler. Modellerin her birini değerlendirmek için aşağıdaki ölçütler kullanılır:

  • Ölçeklenebilirlik:

    • Kiracı sayısı.
    • Kiracı başına depolama.
    • Toplu depolama.
    • Iş yük -ünü.
  • Kiracı yalıtımı: Veri yalıtımı ve performansı (bir kiracının iş yükünün diğerlerini etkileyip etkilemediği).

  • Kiracı başına maliyet: Veritabanı maliyetleri.

  • Geliştirme karmaşıklığı:

    • Şemada yapılan değişiklikler.
    • Sorgularda yapılan değişiklikler (desen için gereklidir).
  • İşlem karmaşıklığı:

    • Performansı izleme ve yönetme.
    • Şema yönetimi.
    • Kiracı geri yükleniyor.
    • Olağanüstü durum kurtarma.
  • Özelleştirilebilirlik: Kiracıya veya kiracı sınıfına özgü şema özelleştirmelerini destekleme kolaylığı.

Kiracılık tartışması veri katmanına odaklanır. Ancak bir an için uygulama katmanını düşünün. Uygulama katmanı monolitik bir varlık olarak değerlendirilir. Uygulamayı birçok küçük bileşene bölerseniz kiracı modeli seçiminiz değişebilir. Hem kiracı hem de kullanılan depolama teknolojisi veya platformuyla ilgili olarak bazı bileşenlere diğerlerinden farklı davranabilirsiniz.

C. Tek kiracılı veritabanı ile tek başına tek kiracılı uygulama

Uygulama düzeyi yalıtımı

Bu modelde, tüm uygulama her kiracı için bir kez art arda yüklenir. Uygulamanın her örneği tek başına bir örnek olduğundan hiçbir zaman başka bir tek başına örnekle etkileşim kurmaz. Uygulamanın her örneğinde tek bir kiracı vardır ve bu nedenle yalnızca bir veritabanına ihtiyaç duyar. Kiracı, veritabanının tamamına sahiptir.

Design of standalone app with exactly one single-tenant database.

Her uygulama örneği ayrı bir Azure kaynak grubuna yüklenir. Kaynak grubu, yazılım satıcısına veya kiracıya ait bir aboneliğe ait olabilir. Her iki durumda da, satıcı kiracının yazılımını yönetebilir. Her uygulama örneği, ilgili veritabanına bağlanacak şekilde yapılandırılır.

Her kiracı veritabanı tek bir veritabanı olarak dağıtılır. Bu model en büyük veritabanı yalıtımını sağlar. Ancak yalıtım, en yüksek yüklerini işlemek için her veritabanına yeterli kaynağın ayrılmasını gerektirir. Burada elastik havuzların farklı kaynak gruplarına veya farklı aboneliklere dağıtılan veritabanları için kullanılamayacağı önemlidir. Bu sınırlama, bu tek başına tek kiracılı uygulama modelini genel veritabanı maliyeti açısından en pahalı çözüm yapar.

Satıcı yönetimi

Uygulama örnekleri farklı kiracı aboneliklerinde yüklü olsa bile satıcı tüm tek başına uygulama örneklerindeki tüm veritabanlarına erişebilir. Erişim, SQL bağlantıları aracılığıyla sağlanır. Bu örnekler arası erişim, satıcının raporlama veya analiz amacıyla şema yönetimini ve veritabanları arası sorguyu merkezileştirmesini sağlayabilir. Bu tür bir merkezi yönetim isteniyorsa, kiracı tanımlayıcılarını veritabanı URI'lerine eşleyen bir katalog dağıtılmalıdır. Azure SQL Veritabanı, katalog sağlamak için birlikte kullanılan bir parçalama kitaplığı sağlar. Parçalama kitaplığı resmi olarak Elastik Veritabanı İstemci Kitaplığı olarak adlandırılır.

D. Kiracı başına veritabanı içeren çok kiracılı uygulama

Bu sonraki düzende, tümü tek kiracılı veritabanları olan birçok veritabanı olan çok kiracılı bir uygulama kullanılır. Her yeni kiracı için yeni bir veritabanı sağlanır. Uygulama katmanı, düğüm başına daha fazla kaynak eklenerek dikey olarak ölçeklendirilir. Veya daha fazla düğüm ekleyerek uygulamanın ölçeği yatay olarak genişletilir. Ölçeklendirme iş yükünü temel alır ve tek tek veritabanlarının sayısından veya ölçeğinden bağımsızdır.

Design of multi-tenant app with database-per-tenant.

Kiracı için özelleştirme

Tek başına uygulama düzeninde olduğu gibi, tek kiracılı veritabanlarının kullanılması da güçlü kiracı yalıtımı sağlar. Modeli yalnızca tek kiracılı veritabanlarını belirten herhangi bir uygulamada, belirli bir veritabanının şeması kendi kiracısı için özelleştirilebilir ve iyileştirilebilir. Bu özelleştirme, uygulamadaki diğer kiracıları etkilemez. Belki de bir kiracının tüm kiracıların ihtiyaç duyduğu temel veri alanlarının ötesinde verilere ihtiyacı olabilir. Ayrıca, ek veri alanının bir dizine ihtiyacı olabilir.

Kiracı başına veritabanı ile, bir veya daha fazla kiracı için şemayı özelleştirmek kolaydır. Uygulama satıcısının şema özelleştirmelerini büyük ölçekte dikkatle yönetmek için yordamlar tasarlaması gerekir.

Elastik havuzlar

Veritabanları aynı kaynak grubunda dağıtıldığında elastik havuzlar halinde gruplandırılabilir. Havuzlar, kaynakları birçok veritabanında paylaşmanın uygun maliyetli bir yolunu sağlar. Bu havuz seçeneği, her veritabanının karşılaştığı kullanım artışlarını karşılayacak kadar büyük olmasını gerektirmekten daha ucuzdur. Havuza alınan veritabanları kaynaklara erişimi paylaşsa da yüksek düzeyde performans yalıtımı elde edebilir.

Design of multi-tenant app with database-per-tenant, using elastic pool.

Azure SQL Veritabanı paylaşımı yapılandırmak, izlemek ve yönetmek için gereken araçları sağlar. Hem havuz düzeyinde hem de veritabanı düzeyinde performans ölçümleri Azure portalında ve Azure İzleyici günlükleri aracılığıyla kullanılabilir. Ölçümler hem toplama hem de kiracıya özgü performansla ilgili harika içgörüler sağlayabilir. Belirli bir kiracıya ayrılmış kaynaklar sağlamak için tek tek veritabanları havuzlar arasında taşınabilir. Bu araçlar, uygun maliyetli bir şekilde iyi performans sağlamanıza olanak tanır.

Kiracı başına veritabanı için işlem ölçeği

Azure SQL Veritabanı, büyük ölçekli veritabanlarını yönetmek için tasarlanmış birçok yönetim özelliğine (100.000'den fazla veritabanı gibi) sahiptir. Bu özellikler, kiracı başına veritabanı desenini makul hale getirir.

Örneğin, bir sistemin tek veritabanı olarak 1000 kiracılı bir veritabanına sahip olduğunu varsayalım. Veritabanında 20 dizin olabilir. Sistem 1000 tek kiracılı veritabanına sahip olacak şekilde dönüştürülürse dizin sayısı 20.000'e yükselir. Otomatik ayarlamanın bir parçası olarak Azure SQL Veritabanı'nda otomatik dizin oluşturma özellikleri varsayılan olarak etkinleştirilir. Otomatik dizin oluşturma, 20.000 dizini ve bunların devam eden oluşturma ve bırakma iyileştirmelerini sizin için yönetir. Bu otomatik eylemler tek bir veritabanında gerçekleşir ve diğer veritabanlarındaki benzer eylemlerle eşgüdümlü veya kısıtlanmaz. Otomatik dizin oluşturma, meşgul bir veritabanındaki dizinleri daha az meşgul bir veritabanından farklı şekilde ele alır. Bu büyük yönetim görevinin el ile yapılması gerekiyorsa, bu tür dizin yönetimi özelleştirmeleri kiracı başına veritabanı ölçeğinde pratik olmaz.

İyi ölçeklendirilen diğer yönetim özellikleri şunlardır:

  • Yerleşik yedeklemeler.
  • Yüksek kullanılabilirlik.
  • Disk içi şifreleme.
  • Performans telemetrisi.

Otomatikleştirme

Yönetim işlemleri bir devops modeli aracılığıyla betik oluşturulabilir ve sunulur. İşlemler uygulamada otomatikleştirilebilir ve kullanıma sunulur.

Örneğin, tek bir kiracının kurtarmasını zamanın önceki bir noktasına otomatikleştirebilirsiniz. Kurtarmanın yalnızca kiracıyı depolayan tek kiracılı veritabanını geri yüklemesi gerekir. Bu geri yükleme, yönetim işlemlerinin her bir kiracının ayrıntılı düzeyinde olduğunu onaylayan diğer kiracıları etkilemez.

E. Çok kiracılı veritabanlarıyla çok kiracılı uygulama

Başka bir kullanılabilir düzen, çok kiracılı bir veritabanında birçok kiracı depolamaktır. Uygulama örneğinde herhangi bir sayıda çok kiracılı veritabanı olabilir. Çok kiracılı bir veritabanının şeması, belirli bir kiracıdaki verilerin seçmeli olarak alınabilmesi için bir veya daha fazla kiracı tanımlayıcı sütununa sahip olmalıdır. Ayrıca, şemada yalnızca bir kiracı alt kümesi tarafından kullanılan birkaç tablo veya sütun gerekebilir. Ancak statik kod ve başvuru verileri yalnızca bir kez depolanır ve tüm kiracılar tarafından paylaşılır.

Kiracı yalıtımı feda edilir

Veri: Çok kiracılı bir veritabanı mutlaka kiracı yalıtımını feda eder. Birden çok kiracının verileri tek bir veritabanında birlikte depolanır. Geliştirme sırasında sorguların hiçbir zaman birden fazla kiracıdan verileri göstermediğinden emin olun. SQL Veritabanı, sorgudan döndürülen verilerin kapsamının tek bir kiracıya uygulanmasını zorunlu kılabilir, satır düzeyi güvenliği destekler.

İşleme: Çok kiracılı bir veritabanı, işlem ve depolama kaynaklarını tüm kiracıları arasında paylaşır. Bir bütün olarak veritabanı, kabul edilebilir bir performans sergilediğinden emin olmak için izlenebilir. Ancak Azure sisteminin bu kaynakların tek bir kiracı tarafından kullanımını izlemesi veya yönetmesi için yerleşik bir yolu yoktur. Bu nedenle, çok kiracılı veritabanı, aşırı etkin bir kiracının iş yükünün aynı veritabanındaki diğer kiracıların performans deneyimini etkilediği gürültülü komşularla karşılaşma riskini artırır. Ek uygulama düzeyinde izleme, kiracı düzeyinde performansı izleyebilir.

Düşük maliyet

Genel olarak, çok kiracılı veritabanları en düşük kiracı başına maliyete sahiptir. Tek bir veritabanı için kaynak maliyetleri, eşdeğer boyuttaki elastik havuza göre daha düşüktür. Ayrıca, kiracıların yalnızca sınırlı depolama alanına ihtiyaç duyduğu senaryolar için, potansiyel olarak milyonlarca kiracı tek bir veritabanında depolanabilir. Hiçbir elastik havuz milyonlarca veritabanı içeremez. Ancak, havuz başına 1000 veritabanı içeren ve 1000 havuzu olan bir çözüm, yönetilmez olma riski altında milyonların ölçeğine ulaşabilir.

Parçalanmış çok kiracılı modelin en esnek ve ölçeklenebilir olmasıyla, çok kiracılı veritabanı modelinin iki varyasyonu aşağıda anlatılmaktadır.

F. Tek bir çok kiracılı veritabanına sahip çok kiracılı uygulama

En basit çok kiracılı veritabanı düzeni, tüm kiracıların verilerini barındırmak için tek bir veritabanı kullanır. Daha fazla kiracı eklendikçe, veritabanı daha fazla depolama ve işlem kaynağıyla ölçeklendirilir. Her zaman nihai bir ölçek sınırı olsa da bu ölçeği artırma gerekli olabilir. Ancak, bu sınıra ulaşılmadan çok önce veritabanı yönetilmez hale gelir.

Tek tek kiracılara odaklanan yönetim işlemlerinin çok kiracılı bir veritabanında uygulanması daha karmaşıktır. Büyük ölçekte bu işlemler kabul edilemez bir şekilde yavaşlayabilir. Bir örnek, yalnızca bir kiracı için verilerin belirli bir noktaya geri yüklenmesidir.

G. Parçalı çok kiracılı veritabanlarıyla çok kiracılı uygulama

Çoğu SaaS uygulaması aynı anda yalnızca bir kiracının verilerine erişmektedir. Bu erişim düzeni, kiracı verilerinin birden çok veritabanı veya parçaya dağıtılmasını sağlar ve burada herhangi bir kiracının tüm verileri tek bir parçada yer alır. Parçalı model, çok kiracılı veritabanı deseniyle birlikte neredeyse sınırsız ölçeklendirmeye olanak tanır.

Design of multi-tenant app with sharded multi-tenant databases.

Parçaları yönetme

Parçalama, hem tasarıma hem de operasyonel yönetime karmaşıklık ekler. Kiracılar ve veritabanları arasındaki eşlemenin sürdürülmesi için bir katalog gereklidir. Ayrıca, parçaları ve kiracı popülasyonunu yönetmek için yönetim yordamları gerekir. Örneğin, yordamlar parça ekleyip kaldırmak ve kiracı verilerini parçalar arasında taşımak için tasarlanmalıdır. Ölçeklendirmenin bir yolu, yeni bir parça eklemek ve bunu yeni kiracılarla doldurmaktır. Diğer zamanlarda, yoğun olarak doldurulmuş bir parça daha az yoğun doldurulmuş iki parçaya bölebilirsiniz. Birkaç kiracı taşındıktan veya kullanımdan kaldırıldıktan sonra seyrek doldurulan parçaları birleştirebilirsiniz. Birleştirme, daha uygun maliyetli kaynak kullanımına neden olur. İş yüklerini dengelemek için kiracılar parçalar arasında da taşınabilir.

SQL Veritabanı, parçalama kitaplığı ve katalog veritabanıyla birlikte çalışan bir bölme/birleştirme aracı sağlar. Sağlanan uygulama parçaları bölebilir ve birleştirebilir ve kiracı verilerini parçalar arasında taşıyabilir. Uygulama ayrıca bu işlemler sırasında kataloğu korur ve etkilenen kiracıları taşımadan önce çevrimdışı olarak işaretler. Taşıma sonrasında uygulama kataloğu yeni eşlemeyle yeniden güncelleştirir ve kiracıyı yeniden çevrimiçi olarak işaretler.

Daha küçük veritabanları daha kolay yönetilir

Kiracıları birden çok veritabanına dağıtarak parçalanmış çok kiracılı çözüm, daha kolay yönetilen daha küçük veritabanlarına neden olur. Örneğin, belirli bir kiracıyı önceki bir zamana geri yüklemek artık tüm kiracıları içeren daha büyük bir veritabanı yerine tek bir daha küçük veritabanını yedekten geri yüklemeyi içerir. veritabanı boyutu ve veritabanı başına kiracı sayısı, iş yükü ile yönetim çalışmalarını dengelemek için seçilebilir.

Şemadaki kiracı tanımlayıcısı

Kullanılan parçalama yaklaşımına bağlı olarak, veritabanı şemasına ek kısıtlamalar uygulanabilir. SQL Veritabanı bölme/birleştirme uygulaması, şemanın genellikle kiracı tanımlayıcısı olan parçalama anahtarını içermesini gerektirir. Kiracı tanımlayıcısı, tüm parçalanmış tabloların birincil anahtarında önde gelen öğedir. Kiracı tanımlayıcısı, bölme/birleştirme uygulamasının belirli bir kiracıyla ilişkili verileri hızla bulmasını ve taşımasını sağlar.

Parçalar için elastik havuz

Parçalı çok kiracılı veritabanları elastik havuzlara yerleştirilebilir. Genel olarak, bir havuzda çok sayıda tek kiracılı veritabanının olması, birkaç çok kiracılı veritabanında çok sayıda kiracı olması kadar uygun maliyetlidir. Çok kiracılı veritabanları, çok sayıda nispeten etkin olmayan kiracı olduğunda avantajlıdır.

H. Karma parçalı çok kiracılı veritabanı modeli

Karma modelde, tüm veritabanlarının şemalarında kiracı tanımlayıcısı bulunur. Veritabanlarının tümü birden fazla kiracı depolayabilir ve veritabanları parçalanabilir. Bu nedenle şema açısından hepsi çok kiracılı veritabanlarıdır. Ancak uygulamada bu veritabanlarından bazıları yalnızca bir kiracı içerir. Ne olursa olsun, belirli bir veritabanında depolanan kiracıların miktarının veritabanı şeması üzerinde hiçbir etkisi yoktur.

Kiracıları taşıma

İstediğiniz zaman belirli bir kiracıyı kendi çok kiracılı veritabanına taşıyabilirsiniz. İstediğiniz zaman fikrinizi değiştirebilir ve kiracıyı birden çok kiracı içeren bir veritabanına geri taşıyabilirsiniz. Ayrıca, yeni veritabanını sağladığınızda yeni tek kiracılı veritabanına bir kiracı atayabilirsiniz.

Karma model, tanımlanabilir kiracı gruplarının kaynak gereksinimleri arasında büyük farklar olduğunda ortaya çıkıyor. Örneğin, ücretsiz deneme sürümüne katılan kiracıların abone olan kiracılarla aynı yüksek performans düzeyinin garanti edilmediğini varsayalım. İlke, ücretsiz deneme aşamasındaki kiracıların tüm ücretsiz deneme kiracıları arasında paylaşılan çok kiracılı bir veritabanında depolanması olabilir. Ücretsiz deneme kiracısı temel hizmet katmanına abone olduğunda, kiracı daha az kiracıya sahip olabilecek başka bir çok kiracılı veritabanına taşınabilir. Premium hizmet katmanını ödeyen bir abone kendi yeni tek kiracılı veritabanına taşınabilir.

Havuzlar

Bu karma modelde abone kiracıları için tek kiracılı veritabanları, kiracı başına veritabanı maliyetlerini azaltmak için kaynak havuzlarına yerleştirilebilir. Bu, kiracı başına veritabanı modelinde de gerçekleştirilir.

I. Kiracı modelleri karşılaştırıldığında

Aşağıdaki tabloda ana kiracı modelleri arasındaki farklar özetlemektedir.

Ölçüm Tek başına uygulama Kiracı başına veritabanı Parçalı çok kiracılı
Ölçek Medium
1-100'ler
Çok yüksek
1-100.000
Sınırsız
1-1.000.000
Kiracı yalıtımı Çok yüksek Yüksek Düşük; tek bir kiracı (MT db'de tek başınadır) dışında.
Kiracı başına veritabanı maliyeti Yüksek; tepeler için boyutlandırılır. Düşük; havuzları kullanılır. MT DB'lerdeki küçük kiracılar için en düşük.
Performans izleme ve yönetim Yalnızca kiracı başına Toplama + kiracı başına Toplama; ancak yalnızca tek tekler için kiracı başınadır.
Geliştirme karmaşıklığı Düşük Düşük Orta; parçalama nedeniyle.
operasyonel karmaşıklık Düşük-Yüksek. Tek tek basit, büyük ölçekte karmaşık. Düşük-Orta. Desenler büyük ölçekte karmaşıklığı ele alır. Düşük-Yüksek. Tek tek kiracı yönetimi karmaşıktır.

Sonraki adımlar