Multi-Tenancy
- Türkçe karşılığı
- çok kiracılı mimari, çok kiracılılık
- Okunuşu
- malti tenınsi
Günlük kullanımda iki ad da yaygın.
Kısaca
Multi-tenancy, tek bir sistemin kiracı (tenant) denen birçok müşteriye hizmet verdiği ve her kiracının verisini ve ayarlarını ayrı tuttuğu bir mimaridir.
Multi-tenancy (çok kiracılı mimari) nedir?
Çok kiracılı bir sistemde bir uygulamanın tek bir kurulumu aynı anda birçok müşteriye hizmet verir. Kiracı (tenant) denen her müşteri genellikle bir şirket ya da ekip gibi bir kuruluştur; kendi kullanıcıları, verisi ve ayarları vardır ve her biri sistemi yalnızca kendisininmiş gibi görür. SaaS ürünlerinin çoğu bu şekilde çalışır; tıpkı kiracıların binanın taşıyıcı yapısını, tesisatını ve elektriğini paylaştığı ama her birinin kilitli bir kapısı olduğu bir apartman gibi.
Temel tasarım kararı, kiracıların veriyi nasıl paylaşacağıdır. Bazen silo modeli denen kiracı başına veritabanı yaklaşımında her kiracı kendi veritabanını alır: güçlü yalıtım sağlar ama yönetilecek daha çok şey vardır. Pool modeli denen paylaşılan şemada her tablonun bir tenant_id sütunu vardır ve her sorgu buna göre filtrelemek zorundadır; bu en ucuz seçenektir ve binlerce küçük kiracıya ölçeklenir. Orta yol her kiracıya paylaşılan bir veritabanı içinde kendi şemasını verir; pek çok ürün de modelleri karıştırarak en büyük müşterilerini ayrı silolara taşır.
En büyük risk kiracılar arasında veri sızıntısıdır: kiracı filtresini unutan tek bir sorgu, bir şirketin verisini başka bir şirkete gösterebilir. Ekipler buna karşı kiracıyı her istekte bir kez, oturum açmış hesaptan ya da alt alan adından belirler ve filtreyi tek bir merkezi yerde, örneğin PostgreSQL'in satır düzeyi güvenliğiyle (row-level security), zorunlu kılar. İkinci klasik sorun, yoğun kullanımıyla herkesi yavaşlatan kiracı, yani gürültülü komşu (noisy neighbor) sorunudur; bu da rate limit'ler, kotalar ve yoğun kiracıları kendi kaynaklarına taşımakla çözülür.
Multi-tenancy sıklıkla SaaS ile bir tutulur, ama ikisi farklı sorulara yanıt verir. SaaS, yazılımın çevrim içi abonelik olarak nasıl satıldığı ve sunulduğudur; multi-tenancy ise onu kurmanın yollarından biridir ve bir SaaS ürünü, her müşteri için ayrı bir kurulum çalıştırarak, genellikle daha yüksek bir fiyata, tek kiracılı (single-tenant) da olabilir. Multi-tenancy SaaS dışında da vardır: genel bulutlar birçok müşterinin sanal makinelerini paylaşılan donanım üzerinde çalıştırır, şirketler de tek bir Kubernetes kümesini ekipler arasında paylaştırır.
Önemli noktalar
- Tek bir kurulum, her birinin verisi ve ayarları yalıtılmış birçok kiracıya hizmet verir.
- Veri kiracı başına veritabanına ya da şemaya ayrılabilir veya bir
tenant_idsütunuyla paylaşılabilir. - Eksik bir kiracı filtresi veri sızdırabilir; bu yüzden yalıtım merkezi olarak zorunlu kılınır.
- Gürültülü komşular rate limit'ler, kotalar ve ayrılmış kaynaklarla sınırlanır.
- SaaS bir sunum modelidir; multi-tenancy ise onu kurmak için sıkça kullanılan bir mimaridir.
Örnek
-- One shared table: every row records which tenant owns it
CREATE TABLE invoices (
id bigserial PRIMARY KEY,
tenant_id uuid NOT NULL,
amount numeric NOT NULL
);
-- The database adds the tenant filter to every query on this table
ALTER TABLE invoices ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON invoices
USING (tenant_id = current_setting('app.tenant_id')::uuid);
-- Per request, the app (connected as a role that doesn't own the table) sets the tenant
SET app.tenant_id = '3f2b8c1e-5d4a-4c7e-9b1a-2e6f0d8c7a41';
SELECT * FROM invoices; -- only this tenant's invoices, with no WHERE clauseSık sorulan sorular
Tek kiracılı ile çok kiracılı arasındaki fark nedir?
Tek kiracılı bir kurulumda her müşteri uygulamanın ve veritabanının kendine ait bir kopyasını alır; bu en güçlü yalıtımı ve özelleştirme alanı sağlar ama çalıştırması ve güncellemesi daha pahalıdır. Çok kiracılı bir kurulumda müşteriler tek bir kurulumu paylaşır; bu daha ucuzdur ve herkesi aynı anda günceller, ama yalıtımın yazılımın içine yerleştirilmesi gerekir.
Kiracı ile kullanıcı aynı şey mi?
Hayır. Kiracı genellikle müşteri olan bir kuruluştur ve birçok kullanıcısı olabilir. Şirketlere satılan bir proje takip aracında her şirket bir kiracı, çalışanları da onun kullanıcılarıdır.
Hangi çok kiracılı veritabanı modelini seçmeliyim?
tenant_id sütunlu paylaşılan bir şema çok sayıda küçük kiracıya uyar ve en ucuzudur; kiracı başına veritabanı ise daha az sayıda büyük kiracıya ya da bir müşterinin verisini belirli bir ülkede tutmak gibi katı uyumluluk gereksinimlerine uyar. Pek çok ürün paylaşılan modelle başlar ve büyük müşterilerini daha sonra kendi veritabanlarına taşır.
İlgili sayfalar
- SaaSDevOps ve Bulut, s. 49SaaS (software as a service), internet üzerinden abonelikle sunulan yazılımdır; kullanıcı giriş yapar, sağlayıcı ise her şeyi çalıştırır, günceller ve korur.
- Bulut BilişimDevOps ve Bulut, s. 5Bulut bilişim, sunucu, depolama ve veritabanı gibi bilişim kaynaklarının internet üzerinden, kullandığın kadar öde modeliyle talep üzerine sunulmasıdır.
- YetkilendirmeGüvenlik, s. 55Yetkilendirme, kimliği doğrulanmış bir kullanıcının ya da servisin hangi verileri okuyabileceğine, değiştirebileceğine veya silebileceğine karar vermektir.
- Rate LimitingBackend ve API'ler, s. 40Rate limiting, istemcinin belli bir sürede yapabileceği istek sayısını sınırlayıp sunucuyu ya da API'yi kötüye kullanımdan ve aşırı yükten koruyan tekniktir.
- ShardingVeritabanları, s. 31Sharding, bir veritabanının verisini shard adı verilen birkaç sunucuya bölerek ölçeklendirme yöntemidir; her biri toplamın yalnızca bir kısmını saklar ve işler.
- ÖlçeklenebilirlikYazılım Mimarisi, s. 32Ölçeklenebilirlik, bir sistemin daha fazla kullanıcı ya da veri gibi artan iş yükünü, kaynak ekleyerek performansı düşmeden karşılayabilme yeteneğidir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin