Ana içeriğe geç

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.

Güncellendi 3 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/multi-tenancy

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_id sü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

PostgreSQL satır düzeyi güvenliğiyle paylaşılan bir tabloda kiracıları yalıtmaksql
-- 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 clause

Sı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

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar