Wróć do bloga
Architektura Oprogramowania & SaaSMulti-TenancyArchitekturaSaaSPostgreSQLBazaDanychBezpieczeństwoDanychSkalowalność

Architektura Multi-Tenant w aplikacjach SaaS: Jak zaprojektować bazę danych i bezpieczeństwo pod 1 000+ klientów B2B?

Przewodnik architektoniczny: Porównanie modeli izolacji danych (Shared DB vs Schema per Tenant vs DB per Tenant), Row-Level Security w PostgreSQL i optymalizacja kosztów chmury.

20 października 202614 min czytania0 wyświetleń

Projektowanie aplikacji w modelu SaaS (Software as a Service) dla sektora B2B diametralnie różni się od budowania standardowych portali internetowych. Najważniejszym wyzwaniem inżynierskim, przed którym staje CTO i Lead Architect, jest multi-tenancy – czyli obsługa tysięcy niezależnych organizacji (klientów/tenantów) w ramach jednej platformy.

Błędna decyzja architektoniczna podjęta na etapie MVP potrafi zemścić się po kilkunastu miesiącach w postaci:

  1. Wycieku danych między firmami (Cross-Tenant Leak): Sytuacja, w której Klient A przez błąd w zapytaniu SQL widzi faktury lub dane pracowników Klienta B. W sektorze enterprise oznacza to natychmiastowe zerwanie kontraktu, pozwy i utratę reputacji.
  2. Efektu hałaśliwego sąsiada (Noisy Neighbor Problem): Jeden wielki klient generujący ogromny ruch paraliżuje działanie aplikacji dla wszystkich pozostałych użytkowników.
  3. Koszmaru migracji bazy danych: Każda aktualizacja struktury tabel trwa wiele godzin i wymaga planowanych przestojów systemu.

Oto kompletna analiza modeli architektonicznych multi-tenant wraz z rekomendacjami dla nowoczesnych aplikacji chmurowych.


3 Główne modele izolacji bazy danych w architekturze Multi-Tenant

Wybór strategii izolacji danych to zawsze balans pomiędzy kosztem infrastruktury, bezpieczeństwem a złożonością utrzymania:

MODEL 1: Shared Database, Shared Schema (Zalecany z PostgreSQL RLS)
+-------------------------------------------------------------+
|                     JEDNA BAZA DANYCH                       |
|   +-----------------------------------------------------+   |
|   | Tabela: Zamówienia                                   |   |
|   | tenant_id = 'firma-a' | produkt = 'A' | kwota = 100 |   |
|   | tenant_id = 'firma-b' | produkt = 'B' | kwota = 250 |   |
|   +-----------------------------------------------------+   |
+-------------------------------------------------------------+

MODEL 2: Shared Database, Separate Schema
+-------------------------------------------------------------+
|                     JEDNA BAZA DANYCH                       |
|   +-----------------------+     +-----------------------+   |
|   | Schemat: tenant_acme  |     | Schemat: tenant_beta  |   |
|   | Tabela: Zamówienia    |     | Tabela: Zamówienia    |   |
|   +-----------------------+     +-----------------------+   |
+-------------------------------------------------------------+

MODEL 3: Database per Tenant (Pełna Izolacja Enterprise)
+-----------------------------+ +-----------------------------+
|     BAZA DANYCH KLIENTA A   | |     BAZA DANYCH KLIENTA B   |
|     (Dedykowana instancja)  | |     (Dedykowana instancja)  |
+-----------------------------+ +-----------------------------+

Porównanie modeli multi-tenant

KryteriumModel 1: Shared DB + Shared SchemaModel 2: Schema per TenantModel 3: Database per Tenant
Koszt infrastruktury (Chmura)Najniższy (Jedna baza obsłuży tysiące małych kont)ŚredniNajwyższy (Setki instancji bazy danych)
Izolacja danychLogiczna (Konieczność RLS w bazie)Logiczna na poziomie schematuFizyczna (Maksymalna)
Złożoność migracji (Schema Updates)Bardzo prosta (1 migracja dla całej bazy)Złożona (Pętla po setkach schematów)Bardzo wysoka (Zarządzanie orkiestracją)
Efekt Noisy NeighborWymaga limitowania zapytań (Rate Limiting)Wymaga podziału zasobówNiemal wyeliminowany
Kiedy stosować?90% aplikacji B2B SaaS (Plany Starter / Pro)Średnie przedsiębiorstwaKlienci korporacyjni / Bankowość / Tier Enterprise

Nowoczesny standard branżowy: Row-Level Security (RLS) w PostgreSQL

W przeszłości deweloperzy implementowali izolację danych wyłącznie na poziomie aplikacji, dodając w każdym zapytaniu warunek: WHERE tenant_id = current_tenant.

Wystarczył jeden błąd młodszego programisty w jednym zapytaniu API, aby dane jednej firmy wyciekły do innej.

Dziś standardem enterprise jest wykorzystanie natywnego mechanizmu Row-Level Security (RLS) wbudowanego bezpośrednio w silnik bazy PostgreSQL:

  • Poziom bazy danych wymusza politykę bezpieczeństwa bez względu na to, skąd przychodzi zapytanie.
  • Każda sesja użytkownika ustawia zmienną kontekstową klienta (app.current_tenant_id).
  • Silnik PostgreSQL fizycznie ukrywa wiersze należące do innych organizacji. Nawet jeśli programista zapomni o filtrze w kodzie, baza danych zwróci wyłącznie rekordy należące do zalogowanej firmy.

Architektura hybrydowa: Najlepsze z obu światów

Dla startupów i skalujących się platform SaaS najbardziej zyskownym podejściem jest architektura hybrydowa:

  1. Dla klientów planów Standard / Business: Współdzielona baza danych z PostgreSQL RLS. Gwarantuje minimalne koszty utrzymania serwerów (kilkaset złotych miesięcznie zamiast tysięcy).
  2. Dla klientów Enterprise: Możliwość dynamicznego przekierowania połączenia (Connection Pooling) do dedykowanej bazy danych w wybranym regionie geograficznym (np. wymóg klienta odnośnie przechowywania danych w Niemczech lub Szwajcarii).

Podział subdomen i routing wielodostępny (Multi-Tenant Routing)

W nowoczesnych aplikacjach opartych na Next.js i serwerach brzegowych (Edge Middleware) identyfikacja klienta powinna następować błyskawicznie przed wyrenderowaniem strony:

  • Adresy subdomenowe (firma-a.twojapp.pl): Middleware odczytuje subdomenę z nagłówka Host, weryfikuje status konta w pamięci podręcznej Redis/Edge KV i przekazuje kontekst tenanta do warstwy aplikacji.
  • Custom Domains (panel.firma-klienta.pl): Klienci enterprise mogą podpiąć własną domenę firmową z automatycznym generowaniem certyfikatu SSL (Let's Encrypt / Cloudflare for Platforms).

4 Pytania kontrolne przed premierą Twojej platformy SaaS

Zanim otworzysz rejestrację dla setek firm, upewnij się, że Twoja architektura przeszła poniższy audyt:

  1. Czy posiadasz automatyczne testy integracyjne sprawdzające próby dostępu między tenantami? Każdy endpoint API musi być przetestowany pod kątem odmowy dostępu z tokenem innej organizacji.
  2. Jak wygląda procedura backupu i przywrócenia danych jednego klienta? Jeśli klient przez pomyłkę skasuje swoje dane, czy potrafisz przywrócić tylko jego firmę bez cofania całej bazy w czasie?
  3. Czy wdrożyłeś mechanizm Rate Limitingu? Zabezpieczenie przed sytuacją, w której jeden klient wysyła miliony zapytań przez bota, blokując bazę danych dla reszty.
  4. Czy logi audytowe (Audit Trail) rejestrują działania użytkowników? Kto, kiedy i z jakiego adresu IP modyfikował dane lub pobierał raporty finansowe.

Budujesz lub skalujesz własny produkt SaaS?

Prawidłowo zaprojektowana architektura to oszczędność setek tysięcy złotych na kosztach refaktoryzacji i pewność, że system nie zawiedzie pod napływem tysięcy klientów.

Darmowy Materiał dla Founderów

Planujesz projekt? Pobierz darmowy Wzór Briefu Technologicznego i Specyfikacji MVP

Gotowy szablon pytań i struktury, który pozwoli Ci precyzyjnie opisać wymagania aplikacji przed rozmową z wykonawcą i uniknąć niedoszacowania budżetu.

Formularz pytań MVP Checklista architektury Wycena modułów
Format DOCX & PDF • Natychmiastowe pobranie

PLANUJESZ BUDOWĘ APLIKACJI MOBILNEJ LUB WEBOWEJ?

Omówmy architekturę i estymację w ciągu 24h. Bezpłatnie i bez zobowiązań.