Wielodostępność
Jak działa
Każde żądanie jest powiązane z tenantem poprzez identyfikator (tenant ID / kontekst najemcy), zwykle wyznaczany na podstawie uwierzytelnienia, subdomeny lub nagłówka. Warstwa izolacji wymusza, by operacje i zapytania działały wyłącznie w obrębie danych tego tenanta. Dane partycjonuje się według jednego z trzech modeli: osobne bazy danych na tenanta (najsilniejsza izolacja, najwyższy koszt), współdzielona baza z osobnymi schematami, albo współdzielona baza i współdzielony schemat z kolumną dyskryminującą tenanta (najwyższa gęstość, najniższy koszt, najmocniejsza zależność od zabezpieczeń w warstwie aplikacji). Na poziomie wdrożenia stosuje się modele silo (zasoby dedykowane tenantowi), pool (zasoby współdzielone i skalowalne) oraz bridge (hybryda łącząca oba). Nadrzędna warstwa sterowania (control plane) zarządza onboardingiem, tożsamością, konfiguracją i cyklem życia tenantów, a mechanizmy zarządzania zasobami — limity, kwoty i throttling — chronią przed sytuacją, w której jeden najemca degraduje wydajność pozostałych.
Rozwiązany problem
Uruchamianie osobnej, dedykowanej instancji aplikacji dla każdego klienta jest kosztowne i trudne w utrzymaniu: rośnie liczba środowisk do aktualizacji, monitorowania i skalowania, a zasoby pozostają słabo wykorzystane. Multi-tenancy rozwiązuje ten problem, pozwalając jednej instancji obsłużyć wielu najemców na współdzielonej infrastrukturze — przy zachowaniu izolacji danych i konfiguracji każdego z nich.
Komponenty
Identyfikator powiązujący każde żądanie, rekord i operację z konkretnym tenantem. Propagowany przez cały stos — od uwierzytelnienia po warstwę danych.
Mechanizmy gwarantujące, że dane i działania jednego najemcy nie są dostępne dla innych — od filtrowania zapytań i polityk dostępu po separację sieciową i środowisk wykonawczych.
Strategia rozdzielenia danych tenantów: osobne bazy, współdzielona baza z osobnymi schematami, albo wspólny schemat z kolumną dyskryminującą tenanta.
Oficjalna
Wspólny komponent odpowiedzialny za onboarding, tożsamość, konfigurację, rozliczenia i cykl życia tenantów — nawet gdy ich zasoby są dedykowane (silo).
Limity, kwoty i ograniczanie przepustowości zapobiegające sytuacji, w której jeden tenant zużywa nieproporcjonalną część współdzielonych zasobów.
Oficjalna
Implementacja
Pojedynczy tenant generujący nieproporcjonalne obciążenie może degradować wydajność pozostałych najemców współdzielących zasoby.
Przy współdzielonym schemacie brak filtrowania po identyfikatorze tenanta w choćby jednym zapytaniu może ujawnić dane innego najemcy.
Jeśli kontekst tenanta nie jest konsekwentnie propagowany przez cały stos (kolejki, zadania w tle, wywołania usług), operacje mogą trafić do danych niewłaściwego najemcy.
Ewolucja
Komercyjny sukces oprogramowania dostarczanego jako usługa na współdzielonej, wieloklientowej infrastrukturze ustanowił multi-tenancy jako dominujący wzorzec SaaS.
Pojawienie się publicznej chmury (m.in. Amazon EC2) sprawiło, że współdzielona, skalowalna infrastruktura stała się standardem, wzmacniając korzyści skali z wielodostępności.
Hiperparametry (konfigurowalne osie)
Wybór między silo (zasoby dedykowane), pool (zasoby współdzielone) a bridge (hybryda) dla poszczególnych komponentów systemu.
Sposób rozdzielenia danych tenantów na poziomie przechowywania.
Sposób ustalania tenanta dla żądania: subdomena, nagłówek, claim w tokenie uwierzytelnienia.
Limity i throttling na tenanta chroniące współdzielone zasoby przed nadużyciem.
Wymagania sprzętowe
Multi-tenancy to wzorzec architektoniczny na poziomie oprogramowania i wdrożenia — nie zależy od konkretnego typu sprzętu.