PRODEgemen Avrupa BaaS platformuKontrol Panelini Aç →

Performans · 11 dk. okuma

Özel ve paylaşılan veritabanı: performans ve izolasyon

Affane Daylami · Fondateur · 31 Mayıs 2026

Bloga geri dön

Paylaşılan bir veritabanı, verilerinizin başka bir müşterinin verileriyle karıştırıldığı anlamına gelmez. Bu, veritabanınızın diğer veritabanlarıyla paylaşılan bir Postgres sunucusunda çalıştığı anlamına gelir. Yani asıl soru "verilerim izole edilmiş mi?" değil. » ama “benim kaynaklarım mı?” ". Her kiracının kendi veritabanı, kendi tablosu ve kendi ilkeleri olsa bile gürültülü bir komşu nedeniyle CPU, bellek, bağlantılar ve disk verimi düşebilir.

Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.

Bu makalede, en çok belgelenen Postgres kiracılık modelleri (paylaşılan şema, kiracı tabanı başına, tahsis edilmiş küme, ayrıca kiracı başına veritabanı ve paylaşılan veritabanı olarak da adlandırılır) karşılaştırılmakta, noisy neighbormekanizması açıklanmakta ve ardından Aurabase'in provizyon kodunda doğrulanan kendi iki katmanlı modelini nasıl uyguladığı ayrıntılarıyla anlatılmaktadır. Performans rakamını yayınlamadan önce uyguladığımız metodoloji için arka uç kıyaslama metodolojimizebakın.

İki istemci (RLS, politikalar, service_role) arasında veri sızıntısı sorununu arıyorsanız, bu makalenin konusu bu değil: RLS karşılaştırmamız ve projesine göre ayrılmış veritabanımız bu mantıksal izolasyonu ayrıntılı olarak kapsar. Burada fiziksel kaynaklardan bahsediyoruz: CPU, IO, bağlantılar, önbellek.

Temeller

  • Paylaşılan bir veritabanının mutlaka paylaşılan bir şema olması gerekmez: Aurabase, yalnızca kümeyi paylaşarak her projeye kendi Postgres veritabanını, standart düzeylerinde bile verir.
  • noisy neighbor veri gizliliğini değil fiziksel kaynakları (CPU, IOPS, bağlantılar, otomatik vakum) azaltır: RLS bunu çözmez, rolü bu değildir.
  • Aurabase sağlayıcısı, kodda doğrulanan tam olarak iki mimariye yönlendirme yapar: FullyDedicated (bir proje için ayrılmış CNPG kümesinin tamamı, kurumsal düzeyde) veya SharedClusterDedicated (kuruluşun CNPG kümesine ayrılmış taban, hiçbir zaman başka bir kuruluşla paylaşılmaz).
  • Bir Aurabase filo kümesinin varsayılan gözlemlenen kapasite eşiği küme başına 1000 bazdır, yapılandırılabilir ve bu eşiğin ötesinde özel bir kümeye geçiş yapılması tavsiye edilir.
  • Doğru seçim, "kendini adamış her zaman daha iyidir" refleksine değil, gerçek kısıtlamalarınıza (uyum, trafik öngörülebilirliği, bütçe) bağlıdır.
#
Modeller

En çok paylaşılandan en yalıtılmış olana kadar üç Postgres yönetim modeli

Microsoft'un çok kiracılı SaaS uygulamalarının mimarisine ilişkin resmi belgeleri, genellikle Silo (kiracı başına ayrılmış kaynaklar), Havuz (tamamen paylaşılan kaynaklar) ve Köprü (ikisinin bir karışımı, bazıları yalıtılmış kiracılar, diğerleri paylaşılan) olarak adlandırılan üç kiracılık modelini birbirinden ayırır. Bu üç model şema, veritabanı veya tüm küme düzeyinde doğrudan Postgres'e uygulanır.

Somut olarak, Postgres arka ucu için bu üç farklı mimari sağlar. The shared schema (a single base, a tenant_idcolumn, RLS policies which filter the rows) is the most common Pool model in multi-tenant guides: economical, but the border between two clients becomes an SQL expression evaluated table by table. The base per tenant on a shared cluster is an intermediate Bridge model: each tenant has its own Postgres base (a real CREATE DATABASEcommand), but several bases coexist on the same physical cluster, therefore sharing CPU, IO and connections. The cluster fully dedicated per tenant is the complete Silo model: completely isolated CPU, RAM and IO resources, generally reserved for tenants with high compliance or load issues.

ModeliKaynak yalıtımıDepolama yalıtımıOperasyonel Çaba
Paylaşılan şema (tenant_id + RLS)YokYok (ortak masa)Minimum (çalıştırılacak 1 taban)
Kiracı bazında, paylaşılan kümeKısmi (küme CPU/IO)Toplam (kendi bazında)Orta (N baz, 1 küme)
Kiracı başına tamamen ayrılmış kümeToplamToplamYüksek (kiracı başına 1 küme)

Silo/Havuz/Köprü terminolojisi: resmi Microsoft belgeleri, çok kiracılı SaaS mimari modelleri (Azure Mimarlık Merkezi).

Paylaşılan bir kümede kiracı başına temel alınan ara model, "herkes için tek bir taban" ile "istemci başına bir sunucu" arasındaki seçimi ikili olarak sunan kılavuzlarda genellikle yoktur. Ancak bu, aşağıda ayrıntıları verilen Aurabase'in varsayılan olarak kullandığı yöntemdir.

Bu üç model arasındaki seçim, yalnızca bir BaaS sağlayıcısıyla değil, her çok kiracılı mimari kararında ortaya çıkar: yönetilen Postgres (RDS, Cloud SQL veya kendi kendine barındırılan bir örnek) üzerinde kendi SaaS arka ucunu oluşturan bir ekip, birkaç istemci aynı fiziksel örneğe yerleştirildiğinde aynı çekişme mekanizmalarının devreye girmesiyle tam olarak aynı tahkimi gerçekleştirir.

#
Mekanizma

Gürültülü komşu: Kaynaklar paylaşıldığında bozulan şey

noisy neighbor (gürültülü komşu), aynı sunucudaki diğer kiracıların zararına olacak şekilde bir altyapının paylaşılan kaynaklarının orantısız bir kısmını tüketen bir kiracıdır. Terim genel buluttan gelir ancak doğrudan paylaşılan bir Postgres kümesi için geçerlidir: bir veritabanı, diğerlerinin performansını, onların verilerine hiç dokunmadan düşürebilir.

Üretimde en sık altı mekanizma ortaya çıkar:

  • CPU çekişmesi: pahalı bir sorgu (indeks olmadan birleştirme, büyük sıralama), çekirdeğin kümedeki tüm etkin veritabanları arasında paylaştığı CPU döngülerini tüketir.
  • IOPS çekişmesi: bir yedekleme, bir VACUUM FULL veya büyük miktarda içe aktarma, kümenin disk verimini doyurur, diğer veritabanlarına okuma ve yazma işlemlerini yavaşlatır.
  • Bağlantı tükenmesi: max_connections taban başına değil, tüm küme düzeyindeki etkin bağlantı sayısını sınırlar. Çok fazla açılan bir taban başkalarının marjını azaltır.
  • Autovacuum çekişmesi: autovacuum küme başına sınırlı sayıda çalışanla çalışır; Yazma hızı yüksek bir veritabanı, başka bir veritabanının tablolarının temizlenmesini geciktirebilir.
  • Önbellek tahliyesi: shared_buffers tüm küme için tek bir bellektir; Büyük bir çalışma kümesine sahip bir veritabanı, daha küçük bir komşu veritabanının önbelleğe alınmış sayfalarını çıkarabilir.
  • Paylaşılan bakım pencereleri: yedekleme, replika yük devretme veya büyük yükseltme, taban bazında değil, kümenin tamamı için geçerlidir.
Dört projeyle paylaşılan küme yerine tek bir projeye ayrılmış kümeSolda, paylaşılan bir CNPG kümesi, tümü aynı CPU, IOPS ve paylaşılan bağlantı havuzuna doğru birleşen dört temele (Proje A'dan D'ye) ev sahipliği yapıyor, dolayısıyla aralarında olası bir çekişme var. Sağda, özel bir CNPG kümesi CPU, IOPS ve ayrılmış bağlantılar ile yalnızca bir projeye ev sahipliği yapıyor, dolayısıyla harici çekişme mümkün değil.Paylaşılan kümeProje AProje BProje CProje DCPU · Paylaşılan IOPSpaylaşılan bağlantılarA, B, C, D arasında olası çekişmeÖzel kümeProjenizCPU · Ayrılmış IOPSayrılmış bağlantılarDış kısıtlama yok

Yapısal diyagram, ölçüm sonucu değil: bu iki topoloji için bugüne kadar yayınlanmış karşılaştırmalı performans rakamı yoktur.

Bağlantı bütçesi, gecikmeden önce bile genellikle üretimdeki en görünür belirtidir. Bu, max_connections ayarlama rehberimizin ve karşılaştırmamızın PgBouncer, Supavisor ve PgCatayrıntılı konusudur.

A transaction mode pooler (PgBouncer, Supavisor, PgCat) mitigates connection exhaustion, but does not remove CPU or IOPS contention: it reuses existing server connections, it does not add additional CPU cores or disk throughput to the cluster. Our article on transaction pooling mode details what this mode actually changes, and what it doesn't change.

#
Sınır

RLS kaynakları değil verileri izole eder

Satır Düzeyinde Güvenlik farklı bir sorunu çözer: bir sorgunun başka bir kiracının satırlarını mantıksal düzeyde okumasını veya değiştirmesini engeller. Belirli bir kiracı için CPU döngüsü, bağlantı yuvası veya disk verimi ayırmaz.

İki kiracı mükemmel bir şekilde su geçirmez RLS politikalarına sahip olabilir ve aynı zamanda birbirlerini olumsuz etkileyebilir: Gürültülü komşu, erişim haklarıyla ilgili değil, fiziksel kaynaklarla ilgili bir sorundur. Bu ikisini karıştırmak, EPIRB devreye girdiğinde yanlış bir operasyonel güvenlik algısına yol açar.

Bilgi

Mantıksal izolasyon (RLS politikaları, service_role, güvenlik tarafında projeler arasındaki sınır) için özel makalemize bakın: RLS ve proje başına tahsis edilmiş taban, Aurabase'den çok kiracılı izolasyon seçimi. Bu makale fiziksel kaynaklar düzeyinde kalıyor.

#
Kodda

Kodla doğrulanan Aurabase modeli

Hazırlayıcı kodu (aura-provisioner), etkin bir Postgres projesi için, kodun Görev 12 olarak adlandırdığı bir sağlama birleştirmesinden tam olarak iki olası mimariyi belgelemektedir: FullyDedicated ve SharedClusterDedicated. Eski şema taneli modeller sağlama yolundan kaldırıldı.

enterprise düzeyi FullyDedicatedtetikler: bu tek proje için ayrılmış CNPG kümesinin tamamı. Diğer tüm düzeyler (ücretsiz, profesyonel, ekip) SharedClusterDedicated'ye yönlendirilir: proje organizasyonunun CNPG kümesinde tam teşekküllü bir Postgres project_<uuid> veritabanı. Bu nedenle paylaşılan bir şema değildir: standart bir planda bile veritabanınız ortak bir tablodaki diğer satırlar arasında değil, tam bir Postgres veritabanıdır. Paylaşılan, tabanın kendisi değil, kümedir (CPU, RAM, disk, bağlantılar).

Bir kuruluşun CNPG kümesi, ilk Postgres projesi sağlandığında ve hiçbir zaman başka bir kuruluştan gelen bir projeyi barındırmadığında oluşturulur; bu, kod düzeyinde kilitlenen bir tasarım seçeneğidir (org_cluster.rs, oluşturma sırasında kuruluşa göre Postgres öneri kilidi). Bu nedenle, paylaşılan Aurabase iskelesindeki olası tek gürültücü komşu, asla üçüncü taraf bir müşterinin değil, kendi kuruluşunuzun başka bir projesidir.

fleet.rsrust
/// Organizasyonel bir kümenin nominal kapasitesi (proje tabanı sayısı).
/// Gözlemlenebilirlik eşiği: bunun ötesinde kuruluşu FullyDedicated'e yönlendirin.
/// FLEET_CLUSTER_CAPACITY aracılığıyla kontrol edilebilir (varsayılan 1000, sınırlı [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
Olası mimariler
FullyDedicated veya SharedClusterDedicated, başkası yok
1000
Bazlar/küme (varsayılan)
Yapılandırılabilir, 1 ila 1.000.000 arasında sınırlıdır
PG 16
Postgres sürümü
Kiracı/filo kümelerinde henüz PG 17 değil

Aurabase tarafından yönetilen PostgreSQL küme mimarisi özellikleri.

Küme başına 1000 bazdan oluşan bu eşik, kesin bir sınır değildir: otomatik bir blok değil, FullyDedicated'ye geçiş önerisini tetikleyen bir gözlemlenebilirlik kriteridir. Artık herhangi bir yerleştirme kararına yön vermiyor; artık kuruluş başına yalnızca bir küme mümkün.

Her küme, ister özel ister filo, her iki topolojide de aktif bağlantılar üzerindeki baskının bir kısmını emen bir CNPG Havuzlayıcıyı (PgBouncer) açığa çıkarır. Bu havuzlayıcının kaynak çekişmesi için gerçekte neyi değiştirdiği aşağıda ayrıntılı olarak açıklanmıştır.

Paylaşılan bir kümenin CPU/RAM boyutu da kuruluşlar arasında tek tip değildir: tüm düzeylere uygulanan tek bir boyuttan değil, özel bir işlev (FleetSizing::from_org_plan, org_cluster.rsile doğrulanmıştır) aracılığıyla kuruluş düzeyinden türetilir. Ekip düzeyindeki bir kuruluş, kümesini serbest düzeydeki bir kuruluşla aynı şekilde boyutlandırmaz.

Bu iki mimari, üretimde kullanılan CNPG görüntüsünün Docker dosyasında doğrulanan sürüm 17 değil, PostgreSQL 16 üzerinde çalışır. Bu sürüm seçiminin, Postgres 16 vs 17 vs 18 karşılaştırmamızdaayrıntılı olarak açıklanan kendi ayarlama sonuçları vardır.

#
Karar

Havuzlama yeterli olduğunda ve tahsis gerekli olduğunda

Astuce

Havuzlama ucuz bir uzlaşma değildir. It corresponds to the traffic of the vast majority of projects in development, launch or moderate growth, where a dedicated cluster would be an additional cost without measurable benefit.

SinyalPaylaşmak yeterliÖzel tavsiye edilir
Fiziksel izolasyona resmi uyum (sağlık, İK, kamu sektörü)HayırEvet
Tahmin edilebilir trafik, orta düzeyde zirvelerEvet
Tahmin edilemeyen ve sürekli pik yükKısıtlama riskiEvet
Kısıtlı bütçe, ürün doğrulama aşamasındaEvet
Belgelenmiş yalıtım gerektiren sözleşme maddesi (DPA)HayırEvet

Belgelenmiş fiziksel izolasyona ilişkin sözleşme yükümlülüğüne tabi projeler için, DPA ve uyumluluk sayfalarımız her bir düzeyin neleri kapsadığını ayrıntılı olarak gösterir.

The downside of the base-by-tenant model, highlighted by several schema migration management tools like Bytebase, is operational rather than technical: each migration must be applied and verified on each base, one by one, even when they coexist on the same cluster. A fully dedicated cluster does not eliminate this cost, it even adds it: one migration per cluster to monitor independently, rather than just one.

CodeOpinion gibi çok kiracılı yazılım mimarisinde uzmanlaşmış kaynaklar, düzenli olarak bu ara yaklaşımı (paylaşılan altyapı üzerinde kiracı bazında), iki uç arasındaki ikili bir seçim yerine, paylaşılan şema ile tamamen tahsis edilmiş küme arasında makul bir uzlaşma olarak sunar.

Going from shared to dedicated does not require rewriting a schema or changing engines: in both cases, it is Postgres, with the same pg_dump / pg_restore chain as that described in our Supabase to Aurabase migration guide. Seviyeyi değiştirmek, uygulamanın yeniden yazılması değil, bir geçiş işlemi olarak kalır.

#
SSS

Sık sorulan sorular

Aurabase paylaşılan veritabanı başka bir şirketin projesi nedeniyle yavaşlayabilir mi?+
Hayır. Aurabase paylaşımlı CNPG kümesi tek bir kuruluşa aittir ve hiçbir zaman üçüncü taraf bir kuruluşa ait, provizyon koduyla (org_cluster.rs) doğrulanan bir projeye ev sahipliği yapmaz. Bu seviyedeki mümkün olan tek gürültülü komşu, kendi kuruluşunuzun başka bir projesidir.
Aurabase'in paylaşılan katmanı tenant_id sütununa sahip paylaşılan bir şema kullanıyor mu?+
Hayır. Ücretsiz, profesyonel ve ekip düzeylerinde bile her proje kendi Postgres veritabanını (<9>project_<uuid></9>) alır. Paylaşılan, tabanın kendisi veya diyagramı değil, CNPG kümesidir (CPU, RAM, disk, bağlantılar).
Projemin özel bir kümeye ihtiyacı olup olmadığını nasıl anlarım?+
En sık üç sinyal ortaya çıkıyor: kaynakların fiziksel izolasyonuna ilişkin resmi bir uyumluluk gerekliliği, mevcut bağlantıları düzenli olarak dolduran sürekli ve öngörülemeyen trafik veya belgelenmiş izolasyon gerektiren DPA tipi bir sözleşme maddesi. Bu eşik değerlerin altında, çoğu durumda havuzlama ekonomik olarak daha rasyonel olmaya devam etmektedir.
Küme başına 1000 baz eşiği kesin bir sınır mıdır?+
Hayır, bu bir gözlemlenebilirlik eşiğidir, otomatik bir teknik blok değil. FLEET_CLUSTER_CAPACITY değişkeni aracılığıyla yapılandırılabilir (varsayılan 1000, 1 ile 1.000.000 arasında sınırlıdır) ve bir kuruluşun özel bir kümeye yönelmesi gerektiğinin sinyalini vermek için kullanılır.
EPIRB gürültülü komşuları önlemek için yeterli mi?+
Hayır. RLS, bir sorgu tarafından görülebilen satırları filtreler; ne CPU'yu, ne IOPS'yi, ne de belirli bir kiracıya olan bağlantıları ayırır. Tamamen su geçirmez RLS politikalarına sahip iki kiracı, aynı fiziksel kümeyi paylaşmaları durumunda yine de birbirlerini düşürebilir. Mantıksal yalıtım kısmı için RLS ve proje başına ayrılmış taban hakkındaki makalemize bakın.
Havuzlamanın maliyeti neden özel bir kümeden daha az?+
Çünkü bir Postgres kümesinin sabit maliyeti (CPU, RAM, ayrılmış depolama, yedeklemeler), tek bir proje tarafından tam olarak ödenmek yerine, organizasyonun onu işgal eden tüm tabanları arasında dağıtılır. Tahsis edilmiş bir küme, gerçek proje yükü düşük olduğunda bile faturalandırılmaya devam eder; bu da, özellikle daha önce değil, bir uyumluluk veya trafik sinyalinin bunu haklı çıkarması durumunda rasyonel bir seçim haline getirir.
#
Sonuç

Hatırlanması gerekenler

Özel taban ve paylaşılan taban, veri güvenliği açısından çakışmaz: her iki model de bir kiracıyı diğerinden mantıksal düzeyde doğru şekilde izole edebilir. Fiziksel kaynaklar (CPU, IOPS, bağlantılar, önbellek, bakım pencereleri) konusunda birbirlerine karşı çıkıyorlar. Kötü yazılmış bir RLS politikası değil, gürültülü bir komşuyu tanımlayan bu plandır.

Provizyon kodunda doğrulanan Aurabase modeli, varsayılan olarak bir ara uzlaşmayı korur: proje başına özel bir Postgres veritabanı, paylaşılan bir küme üzerinde, ancak kesinlikle tek bir kuruluş için ayrılmış, tamamen ayrılmış bir küme iş düzeyi için ayrılmıştır. Doğru seçim, adanmışlığın her zaman en iyi seçenek olacağı refleksine değil, gerçek kısıtlamalarınıza bağlıdır.

DAĞITILMAYA HAZIR MISINIZ?

Beş dakika içinde arka ucunuz.

Kredi kartı gerekmez · 500 MB ücretsiz · 50.000 MAU