Kılavuz

Jargonsuz Multi-Tenant Mimari: Kurucular İçin Rehber

Geliştiriciniz sürekli "multi-tenant" diyor, siz de başınızı sallıyorsunuz. İşte bunun gerçekte ne anlama geldiği, yazılımınızın ne kadar hızlı ve güvenli büyüyebileceğini neden belirlediği ve sizi ileride pahalı bir yeniden inşadan koruyacak sorular.

Have a nice dayHave a nice day11 dk okuma
Jargonsuz Multi-Tenant Mimari: Kurucular İçin Rehber

Bir yazılım ürünü geliştirirken bir noktada bir geliştirici size "multi-tenant" kelimesini söyleyecek, yüzünüze bakacak ve anladığınızı varsayacaktır. Muhtemelen başınızı salladınız. Çoğu kurucu öyle yapar. Ama bu, ne kadar hızlı büyüyebileceğinizin, ne kadar ucuza çalışabileceğinizin ve bir müşteri kendisine ait olmayan veriyi görürse işlerin ne kadar kötü gidebileceğinin tavanını sessizce belirleyen o erken kararlardan biridir. Şimdi on dakikanızı ayırmaya değer, çünkü sonradan gözden geçirmek çok pahalıdır.

Pek çok teknik olmayan kurucunun karşısında oturdum — bir SaaS ürünü için keskin bir fikri olan ama veritabanlarına özel bir ilgisi olmayan insanlar. İyi haber şu: bu kararı iyi vermek için kod yazmayı öğrenmenize gerek yok. Net bir zihinsel modele ve kısa bir soru listesine ihtiyacınız var. Bu rehber tam olarak bu. Süslü kelimeler yok, bir daha bakmayacağınız mimari şemalar yok; sadece geliştiricinizin ilk satır koddan önce anlamanızı dilediği şey.

Tek bir fikir aklınızda kalacaksa, bu olsun: multi-tenancy sonradan eklediğiniz bir özellik değildir. Bir temeldir. Bir evi yeniden boyayabilirsiniz, ama duvarlar dikildikten sonra üzerinde durduğu şeyi kolayca değiştiremezsiniz.

"Multi-tenant" gerçekte ne demek

Bir apartman düşünün. Her kiracının kendi dairesi var — kendi anahtarı, kendi mobilyası, kendi kapısı. Ama hepsi aynı yapıyı paylaşır: temel, tesisat, çatı, asansör. Ev sahibi elli ayrı ev değil, tek bir bina bakar ve kirayı uygun kılan da budur. Multi-tenant yazılım tam olarak böyle çalışır. Tek bir uygulama birçok müşteriye — "tenant"lara — hizmet verir ve her biri, hepsi alttaki aynı paylaşılan sistem üzerinde çalışsa bile, onu kendi özel alanı gibi deneyimler.

Bunun zıttı yaklaşım single-tenant'tır: her müşteri yazılımın kendi ayrı kopyasını alır, her biri için yepyeni müstakil bir ev inşa etmek gibi. Daha özel, daha özelleştirilebilir — ve inşa etmesi, çalıştırması ve güncellemesi çok daha pahalı, çünkü artık tek bir bina yerine elli ev bakıyorsunuz.

Günlük kullandığınız neredeyse her ürün multi-tenant'tır. E-postanız, muhasebe aracınız, rezervasyon sisteminiz, satış ekibinizin içinde yaşadığı CRM. Siz ve binlerce başka şirket aynı temel yazılımı paylaşıyorsunuz ve hiçbiriniz birbirinizi görmüyorsunuz. Bu görünmezlik — bu temiz ayrım — multi-tenancy'nin tüm sanatıdır.

Tek bina, birçok özel daire. İşte multi-tenancy budur. Marifet, hiçbir kiracının asla başkasının dairesine giremeyeceğinden emin olmaktır.
her ilk görüşmede kullandığım benzetme
Her dairesi farklı döşenmiş ama tek bir temeli, tesisatı ve çatıyı paylaşan bir apartmanın kesit illüstrasyonu, sıcak editöryel düz bir tarzda çizilmiş
Tek bir paylaşılan yapı, birçok özel daire. Multi-tenant yazılım, ayrı evlerden oluşan bir sokak değil, apartmandır.

Bu karar neden tüm işinize dokunur

Bunu "geliştiricimin hallettiği teknik bir ayrıntı" diye sınıflandırmak cazip gelir. Ama seçtiğiniz model, doğrudan gerçekten önemsediğiniz iş kısımlarına dalga dalga yayılır: aylık barındırma faturanıza, yeni bir özelliği herkese ne kadar hızlı çıkarabileceğinize, tedirgin bir kurumsal alıcıya ne söz verebileceğinize ve tek bir hatanın ne kadar zarar verebileceğine.

İyi inşa edilmiş bir multi-tenant üründe bir hatayı düzelttiğinizde ya da bir özellik yayınladığınızda, her müşteri bunu aynı anda alır, tek bir güncellemeden. Single-tenant dünyada bu değişikliği, her biri artık birbirinden biraz farklı olabilecek elli ayrı kuruluma yayıyor olurdunuz. Biri salı öğleden sonrası işidir. Diğeri bir projedir. Bunu yılların güncellemeleriyle çarpın, SaaS sektörünün neden multi-tenancy üzerinde döndüğünü görürsünüz.

Madalyonun diğer yüzü, altyapıyı paylaşmanın ayrımın bahsini yükseltmesidir. Bir apartmanda bir tesisat arızası birden fazla daireyi etkileyebilir. Multi-tenant yazılımda, kiracıları nasıl ayırdığınızdaki bir hata yalnızca bir müşteriyi rahatsız etmekle kalmaz — aynı anda herkesin verisini ifşa edebilir. Bu, multi-tenancy'den kaçınmak için bir sebep değildir. Bunu daha önce yapmış biriyle, düzgün bir şekilde inşa etmek için bir sebeptir.

Kiracıları ayırmanın üç yolu

Geliştiriciler multi-tenancy hakkında tartıştığında, genellikle her kiracının verisinin ne kadar ayrı olması gerektiğini tartışırlar. Üç yaygın yaklaşım vardır ve bunlar "maksimum paylaşım, en düşük maliyet"ten "maksimum ayrım, en yüksek maliyet"e doğru kayan bir ölçekte yer alır. Birini kendiniz seçmenize gerek yok — ama geliştiricinizin sizin adınıza yaptığı ödünleşimi anlamalısınız.

1. Paylaşılan veritabanı, paylaşılan tablolar

Herkesin verisi aynı veritabanında, aynı tablolarda, hangi satırların kime ait olduğunu işaretleyen gizli bir etiketle — bir "tenant ID" ile — yaşar. Yazılım her zaman bu etikete göre filtrelemekten sorumludur, böylece A müşterisi yalnızca A'nın satırlarını görür. Bu en ucuz ve en ölçeklenebilir modeldir, çoğu erken aşama SaaS ürününün kullandığıdır. Kötü tarafı: ayrım kodda yaşar, dolayısıyla atlanan tek bir filtre verinin sızma biçimidir. Dikkatli, disiplinli mühendislik gerektirir.

2. Paylaşılan veritabanı, ayrı bölmeler

Tek bir veritabanı, ama her kiracı içinde kendi duvarla çevrili bölümünü alır (geliştiriciler bunlara "şema" der). İlk modelden daha güçlü bir ayrım, hâlâ makul ölçüde verimli ve örneğin bir müşterinin verisini temiz bir şekilde dışa aktarmayı ya da silmeyi kolaylaştırır. Ödünleşim: yüzlerce ve binlerce kiracıya doğru büyüdükçe yönetilecek daha fazla hareketli parça.

3. Her kiracı için ayrı bir veritabanı

Her müşteri kendi özel veritabanını alır — uygulamayı hâlâ paylaşırken onlara özel bir ev vermeye en yakın şey. Bu en güçlü yalıtımdır ve güvenliğe duyarlı kurumsal bir alıcıya anlatılacak en kolay hikâyedir. Aynı zamanda çalıştırması ve işletmesi en pahalı olandır, bu yüzden genellikle yüksek değerli müşterilere, düzenlemeye tabi sektörlere ya da bir veri karışıklığının felaket olacağı ürünlere ayrılır.

ModelYalıtımÇalıştırma maliyetiEn uygun olduğu yer
Paylaşılan tablolar (tenant ID)En düşükEn düşükÇoğu erken aşama SaaS
Ayrı bölmelerOrtaOrtaBüyüyen ürünler, daha temiz veri işleme
Kiracı başına veritabanıEn yüksekEn yüksekKurumsal, düzenlemeye tabi, yüksek riskli veri
Üç model bir bakışta — en ucuzdan en yalıtılmışa kayan bir ölçek.
Üç veri ayrım kademesini yan yana gösteren temiz bir infografik: renkli kiracı etiketli paylaşılan tablolar, tek bir kaptaki ayrı bölmeler ve tamamen ayrı veritabanı silindirleri, sakin editöryel bir tarzda
Aynı ürün, farklı kiracılara farklı ayrım düzeyleriyle hizmet verebilir. Yalıtım bir kadran, bir anahtar değildir.

Yanlış yapamayacağınız kısım: yalıtım

Endişenizi harcayacağınız tek bir yer varsa, o da burasıdır. Tenant yalıtımı, A müşterisinin hiçbir koşulda B müşterisinin verisini göremeyeceği, düzenleyemeyeceği, hatta varlığını sezemeyeceği güvencesidir. Bariz geliyor. Aynı zamanda multi-tenant ürünlerdeki ciddi hataların tek başına en yaygın kaynağıdır, çünkü arıza sessizdir — biri bir gün bir rapor açıp içinde bir yabancının müşterilerini görene kadar her şey yolunda görünür.

Bunun olma sebebi yapısaldır. En ucuz modelde her tek veritabanı isteğinin kiracıya göre filtrelemeyi hatırlaması gerekir. On bin kez doğru, bir kez yanlış yapın, bir sızıntınız olur. İşte bu yüzden deneyimli ekipler geliştiricilerin hatırlamasına güvenmez — yalıtımı temele inşa ederler, böylece unutmak yalnızca olası değil, imkânsız hale gelir. Bunu nasıl yaptıklarını anlamanıza gerek yok. Yapıp yapmadıklarını sormanız gerekiyor.

Bu sorunun daha sessiz bir kuzeni de var: "gürültülü komşu". Kiracılar altyapıyı paylaştığı için, ağır bir şey yapan bir müşteri — devasa bir içe aktarma, kontrolden çıkmış bir rapor — sistemi herkes için yavaşlatabilir, tıpkı her musluğu açık bir dairenin tüm binada su basıncını düşürmesi gibi. İyi multi-tenant tasarımı bunu sınırlar ve adil paylaşımla planlar. Özellikle birkaç çok büyük müşteri bekliyorsanız, sormaya değer.

Single-tenant'ın aslında doğru karar olduğu zamanlar

Multi-tenancy SaaS için varsayılandır, ama bir din değildir. Bir müşteriye kendi ayrı kopyasını vermenin dürüst sebepleri vardır ve iyi bir danışman, her şeyi paylaşılan modele zorlamak yerine bunlardan birine çarptığınızda size söyler.

  • Uyum kuralları, verisinin kanıtlanabilir şekilde ayrı bir yerde durmasını fiilen şart koşan, düzenlemeye tabi bir sektördeki — sağlık, finans, kamu — bir müşteri.
  • Özel bir kurulumu hak edecek kadar ödeyen ve herkesin deneyimine sızmasını istemediğiniz derin bir özelleştirme isteyen tek bir büyük müşteri.
  • Kiracılar arası bir sızıntının maliyeti işi bitirecek kadar hassas veriler; bu da maksimum yalıtımı ek masrafa değer kılar.
  • Yazılımın sizin bulutunuz yerine müşterinin kendi duvarları içinde çalışması gereken bir on-premise gereksinimi.

Kalıba dikkat edin: single-tenant, tüm işi üzerine inşa ettiğiniz varsayılan değil, genellikle belirli bir yüksek değerli müşteri için bilerek başvurduğunuz istisnadır. Bir geliştirici standart ürününüz için daha ilk günden single-tenant öneriyorsa, nedenini size anlatmasını isteyin — bu genellikle çok daha yüksek bir çalıştırma maliyeti ve daha yavaş güncellemeler demektir ve bunun bir tercih olmasını istersiniz, kaza değil.

Varsayılan olarak multi-tenant, bilerek single-tenant. Hata, bir seçeneğiniz olduğunu fark etmeden ikisinden birini yapmaktır.

Kimse kod yazmadan önce sorulacak sorular

Mimariyi tasarlamanıza gerek yok. Tasarlayan kişinin doğru şeyleri düşünmüş olduğundan emin olmanız gerekiyor. İşte teknik olmayan bir kurucunun o ilk görüşmeye getirmesini isteyeceğim kısa liste — yazdırın, sorun, ne kadar güvenle yanıtlandığını izleyin.

  1. 1
    Kiracıların verisini nasıl ayrı tutacaksınız?
    Yapısal bir yanıt arıyorsunuz — sistem bunu sağlıyor — "dikkatli olacağız" değil. Bu, üzerinde pazarlık olmayan tek soru.
  2. 2
    Hangi modeli kullanıyoruz ve neden?
    Paylaşılan tablolar, ayrı bölmeler ya da kiracı başına veritabanı. Yanlış yanıt yok, ama müşterilerinize ve bütçenize uyan bir sebep olmalı.
  3. 3
    Sonradan büyük bir müşteriye özel yalıtım sunabilir miyiz?
    Tamamen paylaşılan başlasanız bile, tasarım büyük ya da düzenlemeye tabi bir müşteriye yeniden inşa olmadan daha güçlü ayrım vermeye yer bırakmalı.
  4. 4
    Bir müşteri devasa olunca ne olur?
    Sistem ağır bir kiracının herkesi yavaşlatmasını nasıl engelliyor? Gürültülü komşu senaryolarının düşünüldüğünü duymak istersiniz.
  5. 5
    Bir müşterinin verisini nasıl temizce dışa aktarır ya da sileriz?
    Müşteriler ayrılır ve gizlilik yasası, talep üzerine verilerini kaldırmanızı gerektirir. Bu, bir panik değil, basit ve iyi anlaşılmış bir işlem olmalı.

Yanıtların teknik ayrıntısına not vermiyorsunuz. Bu soruların hiçbirinin sürpriz olarak düşmediğini kontrol ediyorsunuz. Daha önce multi-tenant yazılım inşa etmiş bir ekibin beşine de net, neredeyse sıkkın yanıtları olacaktır. Birinci ya da üçüncüdeki tereddüt, yavaşlayıp derine inme sinyalidir.

Teknik olmayan bir kurucu ve bir geliştirici, aralarında basılı bir kontrol listesiyle bir masanın iki ucunda oturuyor, sakin ve işbirlikçi, sıcak doğal ışıkta, editöryel illüstrasyon tarzında
Mimariyi tasarlamanıza gerek yok — beş iyi soru sormanız ve ne kadar güvenle yanıtlandıklarını izlemeniz gerekiyor.

Kısa, gerçeğe yakın bir örnek

Bir kurucu bize küçük klinikleri hedefleyen bir randevu aracı için çalışan bir prototiple geldi. Zaten üç ödeme yapan müşterisi vardı — ve sessiz bir sorunu. Pazara hızla çıkmak için ilk geliştirici her kliniğe uygulamanın kendi ayrı kopyasını vermişti. Üç müşteri, üç kurulum, biraz farklı üç sürüm, çünkü her biri yol boyunca küçük bir düzenleme istemişti.

Üçte harika çalışıyordu. Kurucunun kâbusu otuz düşüncesiydi. Her hata düzeltmesi üç yere giriş yapmak demekti. Her yeni özellik üç dağıtım ve test edilecek üç şey demekti. Yeni bir klinik elle kurulması için neredeyse bir hafta alıyordu. Onları lansmana taşıyan model, artık büyümelerini sınırlayan şeydi — tam olarak bu yazının baştan sona anlattığı temel sorunu.

Her şeyi dramatik bir yeniden yazımla söküp atmadık. Çekirdeği, yalıtımı sistem düzeyinde sağlanan paylaşılan bir multi-tenant temele yeniden inşa ettik, klinik başına özelleştirmeleri ayrı kod tabanları yerine yapılandırılabilir ayarlar olarak tuttuk ve mevcut üç kliniği teker teker, paralel olarak taşıdık, böylece kimsenin korkutucu bir geçiş günü olmadı. Yeni bir klinik eklemek bir haftalık elle işten self-servis kayda dönüştü. Yeni özellikler artık her müşteriye tek bir sürümden ulaşıyor.

Buradaki sayılar bir söz değil, örnekleyici — her ürün farklıdır — ama biçim tipiktir: yeniden inşa gerçek para ve birkaç aya mal oldu ve artık parmak kıpırdatmadan ekleyebildikleri ilk avuç dolusu yeni müşteride kendini amorti etti. Kurucunun çıkardığı ders daha ucuz olanıydı: baştan beş soruyu sormuş olsalardı, yeniden inşa edilecek hiçbir şey olmazdı.

Bir ürün geliştirmeyi ya da yeniden inşa etmeyi mi düşünüyorsunuz?

Temeli baştan doğru kurmak, müşteriler bindikten sonra düzeltmekten çok daha ucuzdur. Fikrinizi konuşmaktan, mimariyle ilgili rahatsız edici soruları erken sormaktan ve aşamanıza neyin uyduğunu açıkça söylemekten memnuniyet duyarız — hiçbir şey inşa etme zorunluluğu olmadan.

Yazılımı nasıl inşa ettiğimizi görün

Sık sorulan sorular

Multi-tenant mı yoksa single-tenant mı daha güvenli?
Single-tenant varsayılan olarak daha güçlü fiziksel ayrım sunar, bu yüzden yüksek düzeyde düzenlemeye tabi ya da son derece hassas veriler için tercih edilir. Ama yalıtımı sistem düzeyinde sağlanan, iyi inşa edilmiş bir multi-tenant ürün, işletmelerin büyük çoğunluğu için gayet güvenlidir — ve her gün güvendiğiniz yazılımların çoğu tam olarak böyle çalışır. Güvenlik, hangi modeli seçtiğinizden değil, ne kadar dikkatli inşa edildiğinden gelir.
Single-tenant başlayıp sonradan multi-tenant'a geçebilir miyim?
Geçebilirsiniz, ama bu genellikle bir düzeltme değil, önemli bir yeniden inşadır, çünkü iki yaklaşım temelde farklıdır. Baştan bilerek karar vermenin tüm sebebi budur. Henüz gerçekten bilmiyorsanız, iyi bir ekip erken sürümü, sonradan tam multi-tenancy'ye geçmeyi bir yıkım değil bir yükseltme olacak şekilde tasarlayabilir.
Multi-tenancy, müşterilerimin verisinin birbirine karıştığı anlamına mı gelir?
Görebilecekleri hiçbir şekilde değil. En paylaşımlı modelde veri aynı veritabanında durur, ama her kayıt etiketlidir ve sistem her müşterinin yalnızca kendi verisine eriştiğini garanti eder. Doğru yapıldığında, hiçbir müşteri başkasının verisini göremez, ona erişemez, hatta tespit edemez. Bu garanti yapısal olarak verilemiyorsa, bu dile getirmeye değer bir kırmızı bayraktır.
Bu karar barındırma maliyetlerimi ne kadar etkiler?
Çok, özellikle büyüdükçe. Multi-tenant paylaşımı müşteri başına maliyeti düşük tutar, uygun fiyatlı SaaS fiyatlandırmasını mümkün kılan da budur. Her müşteriye özel bir veritabanı vermek altyapı faturanızı katlar. Birçok ürün, müşterilerin çoğunu paylaşılan modelde çalıştırıp özel kurulumları bu ayrıcalık için ödeyen birkaç yüksek değerli müşteriye ayırarak maliyetleri makul tutar.
Teknik olmayan bir kurucu olarak bunu gerçekten anlamam gerekiyor mu?
Nasıl inşa edildiğini anlamanıza gerek yok — seçeneğin var olduğunu ve geri döndürmenin zor olduğunu anlamanız gerekiyor. Bu yazıdaki beş soruyu geliştiricinize ya da ajansınıza getirin. Onları mühendislikte geçmeye çalışmıyorsunuz; temelin bilinçli bir karar olduğundan emin oluyorsunuz, çünkü sonradan düzeltmesi acı verici olan kısım budur.
Have a nice day
Have a nice day
Yayın ekibi

Have a nice day, küçük ve orta ölçekli işletmelerin dijitalleşmesine yardımcı olan bir yazılım stüdyosudur — yalnızca slaytlarda değil, günlük operasyonlarda gerçekten işe yarayan otomasyon, yapay zeka ve özel yazılımlar.

İlgili hizmetler