PRODSuwerenna europejska platforma BaaSOtwórz Panel →

Wydajność · 11 min odczytu

Dedykowana a współdzielona baza danych: wydajność i izolacja

Affane Daylami · Fondateur · 31 maja 2026

Powrót do bloga

Udostępniona baza danych nie oznacza, że ​​Twoje dane są mieszane z danymi innego klienta. Oznacza to, że Twoja baza danych działa na serwerze Postgres współdzielonym z innymi bazami danych. Zatem prawdziwym pytaniem nie jest „czy moje dane są izolowane?” » ale „czy moje zasoby?” „. Procesor, pamięć, połączenia i przepustowość dysku mogą ulec pogorszeniu z powodu hałaśliwego sąsiada, nawet jeśli każdy dzierżawca ma własną bazę danych, własną tabelę i własne zasady.

Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.

W tym artykule porównano najbardziej udokumentowane modele dzierżawy Postgres (schemat współdzielony, na bazę dzierżawców, dedykowany klaster, zwany także bazą danych na dzierżawcę vs współdzielona baza danych), wyjaśniono mechanizm noisy neighbor, a następnie szczegółowo opisano, w jaki sposób Aurabase implementuje swój własny model dwupoziomowy, zweryfikowany w kodzie dostawcy usług. Metodologię, którą stosujemy przed opublikowaniem wyników, można znaleźć w naszej metodologii testów porównawczych zaplecza.

Jeśli szukasz kwestii wycieku danych między dwoma klientami (RLS, zasady, service_role), nie jest to temat tego artykułu: nasze porównanie RLS i dedykowana baza danych projektu szczegółowo omawiają tę logiczną izolację. Mówimy tutaj o zasobach fizycznych: procesorze, IO, połączeniach, pamięci podręcznej.

Najważniejsze

  • Współdzielona baza danych niekoniecznie jest współdzielonym schematem: Aurabase zapewnia każdemu projektowi własną bazę danych Postgres, nawet na standardowym poziomie, udostępniając jedynie klaster.
  • noisy neighbor degraduje zasoby fizyczne (CPU, IOPS, połączenia, automatyczną próżnię), a nie poufność danych: RLS tego nie rozwiązuje, to nie jest jego rola.
  • Dostawca Aurabase kieruje do dokładnie dwóch architektur, zweryfikowanych w kodzie: FullyDedicated (cały klaster CNPG zarezerwowany dla projektu, poziom przedsiębiorstwa) lub SharedClusterDedicated (dedykowana baza na klastrze CNPG organizacji, nigdy nie udostępniana innej organizacji).
  • Klaster flotowy Aurabase ma domyślny próg obserwowanej pojemności wynoszący 1000 baz na klaster, który można konfigurować, po przekroczeniu którego zaleca się migrację do dedykowanego klastra.
  • Właściwy wybór zależy od rzeczywistych ograniczeń (zgodność, przewidywalność ruchu, budżet), a nie od odruchu „dedykowany jest zawsze lepszy”.
#
Modele

Trzy modele zarządzania Postgres, od najbardziej wspólnych do najbardziej izolowanych

Oficjalna dokumentacja firmy Microsoft dotycząca architektury aplikacji SaaS z wieloma dzierżawcami wyróżnia trzy modele dzierżawy, ogólnie zwane Silo (dedykowane zasoby na dzierżawcę), Pula (w pełni współdzielone zasoby) i Bridge (połączenie tych dwóch, niektórzy izolowani najemcy, inni współdzieleni). Te trzy modele dotyczą bezpośrednio Postgres, na poziomie schematu, bazy danych lub całego klastra.

Konkretnie, w przypadku backendu Postgres daje to trzy różne architektury. Schemat współdzielony (pojedyncza baza, kolumna tenant_id, zasady RLS filtrujące wiersze) to najpopularniejszy model puli w przewodnikach z wieloma dzierżawcami: ekonomiczny, ale granica między dwoma klientami staje się wyrażeniem SQL ocenianym tabela po tabeli. Baza na dzierżawcę we współdzielonym klastrze to pośredni model mostu: każdy dzierżawca ma własną bazę Postgres (prawdziwe polecenie CREATE DATABASE), ale kilka baz współistnieje w tym samym klastrze fizycznym, w związku z czym współdzieli procesor, we/wy i połączenia. Klaster w pełni dedykowany dla każdego dzierżawcy to kompletny model silosu: całkowicie izolowane zasoby procesora, pamięci RAM i we/wy, zwykle zarezerwowane dla dzierżawców z dużymi problemami związanymi ze zgodnością lub obciążeniem.

ModelIzolacja zasobówIzolacja magazynuWysiłek operacyjny
Schemat współdzielony (identyfikator_dzierżawy + RLS)NicBrak (wspólny stół)Minimalna (1 baza do obsługi)
Na podstawie dzierżawy, klaster udostępnionyCzęściowe (procesor/IO klastra)Razem (na podstawie własnej)Umiarkowany (N zasad, 1 klaster)
W pełni dedykowany klaster na dzierżawcęCałkowityCałkowityWysoki (1 klaster na dzierżawcę)

Terminologia silosu / puli / mostu: oficjalna dokumentacja Microsoft, wzorce architektury SaaS z wieloma dzierżawcami (Azure Architecture Center).

Modelu pośredniego, opartego na najemcy we współdzielonym klastrze, często nie ma w przewodnikach, które przedstawiają binarny wybór pomiędzy „jedną bazą dla wszystkich” a „jednym serwerem na klienta”. Jest to jednak ten, którego domyślnie używa Aurabase, co opisano poniżej.

Wybór między tymi trzema modelami pojawia się przy każdej decyzji dotyczącej architektury z wieloma dzierżawcami, nie tylko w przypadku dostawcy BaaS: zespół, który buduje własny backend SaaS na zarządzanym Postgresie (RDS, Cloud SQL lub instancja hostowana samodzielnie) dokonuje dokładnie tego samego arbitrażu, z tymi samymi mechanizmami rywalizacji, gdy kilku klientów jest umieszczonych w tej samej instancji fizycznej.

#
Mechanizm

Hałaśliwy sąsiad: co pogarsza się, gdy zasoby są wspólne

noisy neighbor (hałaśliwy sąsiad) to dzierżawca, który zużywa nieproporcjonalną część współdzielonych zasobów infrastruktury, ze szkodą dla innych dzierżawców na tym samym serwerze. Termin pochodzi z chmury publicznej, ale odnosi się bezpośrednio do współdzielonego klastra Postgres: jedna baza danych może obniżyć wydajność innych, nie dotykając w ogóle ich danych.

W produkcji najczęściej pojawia się sześć mechanizmów:

  • Rywalizacja o procesor: drogie zapytanie (łączenie bez indeksu, sortowanie masowe) zużywa cykle procesora, które jądro współdzieli pomiędzy wszystkimi aktywnymi bazami danych w klastrze.
  • Rywalizacja IOPS: kopia zapasowa, VACUUM FULL lub masowy import obciążają przepustowość dysku klastra, spowalniając odczyt i zapis w innych bazach danych.
  • Wyczerpanie połączeń: max_connections ogranicza liczbę aktywnych połączeń na poziomie całego klastra, a nie na bazę. Baza, która otwiera się zbyt mocno, zmniejsza margines innych.
  • Konflikt dotyczący automatycznej próżni: automatyczna próżnia działa z ograniczoną liczbą pracowników na klaster; baza danych o dużej szybkości zapisu może opóźnić czyszczenie tabel innej bazy danych.
  • Eksmisja pamięci podręcznej: shared_buffers to pojedyncza pamięć dla całego klastra; baza danych z dużym zestawem roboczym może wykluczyć strony z pamięci podręcznej mniejszej sąsiedniej bazy danych.
  • Wspólne okna konserwacji: kopia zapasowa, przełączanie awaryjne repliki lub większa aktualizacja dotyczą całego klastra, a nie poszczególnych baz.
Klaster współdzielony z czterema projektami kontra klaster dedykowany jednemu projektowiPo lewej stronie współdzielony klaster CNPG obsługuje cztery bazy (Projekty A do D), które zbiegają się w celu uzyskania tej samej puli procesorów, IOPS i współdzielonych połączeń, co stwarza możliwość rywalizacji między nimi. Po prawej stronie dedykowany klaster CNPG obsługuje tylko jeden projekt z zarezerwowanym procesorem, IOPS i połączeniami, więc nie jest możliwa rywalizacja zewnętrzna.Klaster udostępnionyProjekt AProjekt BProjekt CProjekt DProcesor · Współdzielone IOPSwspólne połączeniaMożliwa rywalizacja pomiędzy A, B, C, DDedykowany klasterTwój projektProcesor · Zarezerwowane IOPSzarezerwowane połączeniaŻadnych zewnętrznych ograniczeń

Schemat strukturalny, a nie wynik pomiaru: dotychczas nie opublikowano żadnych porównawczych danych dotyczących wydajności dla tych dwóch topologii.

Budżet połączeń jest często najbardziej widocznym objawem w środowisku produkcyjnym, nawet przed opóźnieniami. Jest to szczegółowy temat naszego przewodnika dostrajania max_connections i naszego porównania PgBouncer, Supavisor i PgCat.

Pula w trybie transakcyjnym (PgBouncer, Supavisor, PgCat) łagodzi wyczerpanie połączeń, ale nie usuwa rywalizacji o procesor lub IOPS: ponownie wykorzystuje istniejące połączenia z serwerem, nie dodaje dodatkowych rdzeni procesora ani przepustowości dysku do klastra. Nasz artykuł na temat trybu łączenia transakcji szczegółowo opisuje, co ten tryb faktycznie zmienia, a czego nie zmienia.

#
Limit

RLS izoluje dane, a nie zasoby

Zabezpieczenia na poziomie wiersza rozwiązują inny problem: zapobiegają czytaniu lub modyfikowaniu przez zapytanie wierszy innego dzierżawcy na poziomie logicznym. Nie rezerwuje żadnego cyklu procesora, żadnego gniazda połączeniowego ani przepustowości dysku dla konkretnego dzierżawcy.

Dwóch najemców może mieć doskonale szczelne zasady RLS i jednocześnie degradować się nawzajem: hałaśliwy sąsiad to problem zasobów fizycznych, a nie praw dostępu. Mylenie tych dwóch kwestii prowadzi do fałszywego poczucia bezpieczeństwa operacyjnego po uruchomieniu EPIRB.

Informacje

Informacje na temat izolacji logicznej (polityki RLS, service_role, granica między projektami po stronie bezpieczeństwa) można znaleźć w naszym dedykowanym artykule: RLS i dedykowana baza na projekt, wybór izolacji wielu dzierżawców z Aurabase. Artykuł ten pozostaje na poziomie zasobów fizycznych.

#
W kodzie

Model Aurabase zweryfikowany w kodzie

Kod dostawcy usług (aura-provisioner) dokumentuje dokładnie dwie możliwe architektury aktywnego projektu Postgres na podstawie konsolidacji udostępniania, którą kod określa jako Zadanie 12: FullyDedicated i SharedClusterDedicated. Starsze modele oparte na schemacie zostały usunięte ze ścieżki udostępniania.

Poziom enterprise wyzwala FullyDedicated: cały klaster CNPG zarezerwowany dla tego pojedynczego projektu. Wszystkie pozostałe poziomy (bezpłatny, profesjonalny, zespołowy) prowadzą do SharedClusterDedicated: pełnoprawnej bazy danych Postgres project_<uuid> w klastrze CNPG organizacji projektowej. Dlatego nie jest to schemat współdzielony: nawet w przypadku planu standardowego Twoja baza danych jest kompletną bazą danych Postgres, a nie jedną linią między innymi we wspólnej tabeli. Udostępniany jest klaster (procesor, pamięć RAM, dysk, połączenia), a nie sama baza.

Klaster CNPG organizacji jest tworzony podczas udostępniania pierwszego projektu Postgres i nigdy nie obsługuje projektu z innej organizacji, a wybór projektu jest zablokowany na poziomie kodu (org_cluster.rs, blokada doradcza Postgres według organizacji podczas tworzenia). Jedynym możliwym hałaśliwym sąsiadem na współdzielonym lądowaniu Aurabase jest zatem kolejny projekt Twojej własnej organizacji, a nie klienta strony trzeciej.

fleet.rsrust
/// Nominalna pojemność (liczba baz projektowych) klastra organizacyjnego.
/// Próg obserwowalności: powyżej tego skieruj organizację w stronę Fully Dedicated.
/// Sterowanie poprzez FLEET_CLUSTER_CAPACITY (domyślnie 1000, ograniczone [1, 1_000_000]).
pub fn fleet_cluster_capacity() -> i32 {
    std::env::var("FLEET_CLUSTER_CAPACITY")
        .ok()
        .and_then(|v| v.parse::<i32>().ok())
        .filter(|n| (1..=1_000_000).contains(n))
        .unwrap_or(1000)
}
2
Możliwe architektury
FullyDedicated lub SharedClusterDedicated, żadnych innych
1000
Bazy/klaster (domyślnie)
Konfigurowalne, ograniczone od 1 do 1 000 000
PG 16
Wersja Postgresa
Jeszcze nie PG 17 w klastrach najemców/floty

Specyfikacje architektury klastra zarządzanego przez Aurabase PostgreSQL.

Ten próg 1000 baz na klaster nie jest sztywnym limitem: jest to punkt odniesienia obserwowalności, który wyzwala zalecenie migracji do FullyDedicated, a nie automatycznego bloku. Nie wpływa to już na decyzje o rozmieszczeniu, teraz na organizację można utworzyć tylko jeden klaster.

Każdy klaster, dedykowany lub flotowy, udostępnia CNPG Pooler (PgBouncer), który pochłania część obciążenia aktywnych połączeń, w obu topologiach. Poniżej szczegółowo opisano, co faktycznie zmienia ten Pooler w związku z rywalizacją o zasoby.

Rozmiar procesora/RAM we współdzielonym klastrze również nie jest jednolity pomiędzy organizacjami: wywodzi się z poziomu organizacji za pośrednictwem dedykowanej funkcji (FleetSizing::from_org_plan, zweryfikowanej w org_cluster.rs), a nie z jednego rozmiaru stosowanego na wszystkich poziomach. Organizacja na poziomie zespołu nie określa wielkości swojego klastra w taki sam sposób, jak organizacja na poziomie swobodnym.

Te dwie architektury działają na PostgreSQL 16, a nie na wersji 17, zweryfikowanej w pliku Dockerfile obrazu CNPG używanego w produkcji. Ten wybór wersji ma swoje własne implikacje związane z dostrojeniem, szczegółowo opisane w naszym porównaniu Postgres 16 vs 17 vs 18.

#
Decyzja

Kiedy wystarczy łączenie zasobów, kiedy konieczne staje się dedykowane

Astus

Pooling nie jest tanim kompromisem. Odpowiada to ruchowi zdecydowanej większości projektów w fazie rozwoju, startu lub umiarkowanego wzrostu, gdzie dedykowany klaster byłby dodatkowym kosztem bez wymiernych korzyści.

SygnałWystarczy udostępnićDedykowany polecam
Formalna zgodność w zakresie izolacji fizycznej (zdrowie, HR, sektor publiczny)NIETak
Przewidywalny ruch, umiarkowane szczytyTak
Nieprzewidywalne i trwałe obciążenie szczytoweRyzyko unieruchomieniaTak
Napięty budżet, produkt w fazie walidacjiTak
Klauzula kontraktowa (DPA) wymagająca udokumentowanej izolacjiNIETak

W przypadku projektów objętych umownym zobowiązaniem dotyczącym udokumentowanej izolacji fizycznej, nasze strony dotyczące zgodności DPA i szczegółowo opisują każdy poziom.

Wadą modelu „base-by-tenant” podkreślaną przez kilka narzędzi do zarządzania migracją schematów, takich jak Bytebase, jest raczej charakter operacyjny niż techniczny: każda migracja musi zostać zastosowana i zweryfikowana na każdej bazie, jedna po drugiej, nawet jeśli współistnieją w tym samym klastrze. W pełni dedykowany klaster nie eliminuje tego kosztu, wręcz go dodaje: jedna migracja na klaster w celu niezależnego monitorowania, a nie tylko jedna.

Zasoby specjalizujące się w architekturze oprogramowania z wieloma dzierżawcami, takie jak CodeOpinion, regularnie przedstawiają to pośrednie podejście (w przeliczeniu na dzierżawcę współdzielonej infrastruktury) jako rozsądny kompromis między współdzielonym schematem a w pełni dedykowanym klastrem, a nie binarny wybór między dwiema skrajnościami.

Przejście z wersji współdzielonej na dedykowaną nie wymaga przepisywania schematu ani zmiany silników: w obu przypadkach jest to Postgres z tym samym łańcuchem pg_dump / pg_restore, jak opisano w naszym przewodniku migracji Supabase do Aurabase. Zmiana poziomu pozostaje operacją przełączania, a nie przepisywaniem aplikacji.

#
Często zadawane pytania

Często zadawane pytania

Czy współdzielona baza danych Aurabase może zostać spowolniona przez projekt innej firmy?+
Nie. Współdzielony klaster CNPG Aurabase należy do jednej organizacji i nigdy nie hostuje projektu od organizacji strony trzeciej, zweryfikowanej w kodzie dostawcy usług (org_cluster.rs). Jedynym możliwym hałaśliwym sąsiadem na tym poziomie jest inny projekt Twojej organizacji.
Czy warstwa współdzielona Aurabase korzysta ze schematu współdzielonego z kolumną „tener_id”?+
Nie. Każdy projekt otrzymuje własną bazę danych Postgres (<9>project_<uuid></9>), nawet na poziomie darmowym, profesjonalnym i zespołowym. Udostępniany jest klaster CNPG (CPU, RAM, dysk, połączenia), a nie sama baza lub jej schemat.
Skąd mam wiedzieć, czy mój projekt potrzebuje dedykowanego klastra?+
Najczęściej pojawiają się trzy sygnały: formalny wymóg zgodności dotyczący fizycznej izolacji zasobów, utrzymujący się i nieprzewidywalny ruch, który regularnie nasyca dostępne połączenia lub klauzula umowna typu DPA wymagająca udokumentowanej izolacji. Poniżej tych progów łączenie zasobów pozostaje w większości przypadków bardziej racjonalne ekonomicznie.
Czy próg 1000 baz na klaster jest sztywnym limitem?+
Nie, to próg obserwowalności, a nie automatyczny blok techniczny. Można go konfigurować za pomocą zmiennej FLEET_CLUSTER_CAPACITY (domyślnie 1000, liczba ograniczona od 1 do 1 000 000) i służy do sygnalizowania, że ​​organizacja powinna być zorientowana na dedykowany klaster.
Czy EPIRB wystarczy, aby zapobiec hałaśliwym sąsiadom?+
Nie. RLS filtruje wiersze widoczne w zapytaniu; nie rezerwuje ani procesora, ani IOPS, ani połączeń z określonym dzierżawcą. Dwóch dzierżawców z całkowicie szczelnymi zasadami RLS może nadal ulegać wzajemnej degradacji, jeśli korzystają z tego samego klastra fizycznego. Zobacz nasz artykuł na temat RLS i dedykowanej bazy dla każdego projektu, aby zapoznać się z częścią izolacji logicznej.
Dlaczego łączenie kosztuje mniej niż klaster dedykowany?+
Ponieważ stały koszt klastra Postgres (procesor, pamięć RAM, zarezerwowana pamięć, kopie zapasowe) jest rozdzielany pomiędzy wszystkie bazy organizacji, które go zajmują, a nie pokrywany w całości przez pojedynczy projekt. Dedykowany klaster jest rozliczany nawet wtedy, gdy rzeczywiste obciążenie projektem jest niskie, co czyni go racjonalnym wyborem, zwłaszcza gdy uzasadnia to zgodność lub sygnalizacja świetlna, a nie wcześniej.
#
Wniosek

O czym pamiętać

Baza dedykowana i baza współdzielona nie kolidują z bezpieczeństwem danych: oba modele mogą poprawnie odizolować jednego najemcę od drugiego na poziomie logicznym. Przeciwstawiają się sobie pod względem zasobów fizycznych (procesor, IOPS, połączenia, pamięć podręczna, okna konserwacyjne). To właśnie ten plan definiuje hałaśliwego sąsiada, a nie źle napisaną politykę RLS.

Model Aurabase, zweryfikowany w kodzie dostawcy, domyślnie zachowuje kompromis pośredni: dedykowaną bazę danych Postgres na projekt, we współdzielonym klastrze, ale ściśle zarezerwowaną dla jednej organizacji, z w pełni dedykowanym klastrem zarezerwowanym dla poziomu biznesowego. Właściwy wybór zależy od Twoich rzeczywistych ograniczeń, a nie od odruchu, w którym dedykowana zawsze byłaby najlepszą opcją.

GOTOWY DO WDROŻENIA?

Twój backend w pięć minut.

Karta kredytowa nie jest wymagana · 500 MB za darmo · 50 000 MAU