Bu dosya, bu mimariyi kodda gerçekte var olduğu şekliyle belgeliyor ve 23 Ağustos 2026 itibarıyla dosya bazında doğrulanıyor; diyagramlar, şekiller ve alıntılar dahil. Bu, "Rust Engineering" kümesinin temel sayfasıdır: genel bakışı verir ve yayınlanmış veya yayınlanma sürecinde olan ayrıntılı teknik analizlere (Axum, Cargo çalışma alanı, ağ geçidi, PostgREST, pg_graphql ve dosyanın geri kalanı) bağlantılar verir. Rakip bir BaaS ile tam ürün karşılaştırması için Aurabase ile Supabasekarşılaştırmamıza bakın.
Temeller
- Tek Çalışma Alanı Kargosu: Tek bir
cargo build --workspacetarafından bir araya derlenen 18 kasa (11 iş hizmeti,auraCLI, 5 paylaşılan kitaplık, Rust SDK). - İşletme kodu, bu 18 kasaya dağıtılmış yaklaşık 274.000 satırlık Rust (
find+wc -l, 23 Ağustos 2026 ile ölçülmüştür) ağırlığındadır. - Ağ geçidi (
aura-gateway), her biri kendi ara yazılım yığınına ve kimlik doğrulamasına sahip olan veri (SDK, bağlantı noktası 8080) ve yönetim (Studio, bağlantı noktası 8090) olmak üzere iki düzlemi ayırır. - Aurabase PostgREST'i yeniden yazmaz: Rust hizmetleri tarafından yönetilen gerçek yukarı akış ikili dosyası (v12.2.8) kiracı başına çalışır; katma değer bunun yerine onun çevresindedir.
- Saf Rust'tan dikkate değer tek fark: Edge Functions'ın varsayılan çalışma zamanı (
denomodu), V8 İzolatlarını temel alan özel bir TypeScript hizmetidir;wasmmodu için yerel ve Wasmtime aracılığıyla Rust'ta ikinci bir yol mevcuttur.
Aurabase'i, hizmete göre BaaS ile birleştirilmiş hizmetten ayıran şey nedir?
Çoğu açık kaynak Postgres BaaS, hizmetlerini birden çok dilde paketler. Bu bir değer yargısı değil, somut sonuçları olan mimari bir gerçektir: Oyunda olan diller kadar çok sayıda derleme zinciri, hata kuralı ve senkronizasyonda tutulması gereken kimlik doğrulama mantığı.
Aurabase'de kendi yazdığımız ve bakımını yaptığımız ürün katmanı (ağ geçidi, kimlik doğrulama, veritabanı, gerçek zamanlı, depolama, bildirimler, yapay zeka, provizyon, hesap yönetimi) tek bir Kargo çalışma alanı, tek bir dil, tek bir yapı zinciridir. Bu dosyanın belgelediği seçim budur.
"Birleşik çekirdek", üretimde çalışan her şeyin Rust olduğu anlamına gelmez. Tüm Postgres BaaS gibi Aurabase de kendisinin yazmadığı açık kaynaklı yapı taşlarına güveniyor: PostgreSQL'in kendisi, PostgREST, NATS. Heterojen bir yığının yapısal farkı, bu paylaşılan yapı taşlarıyla ilgili değildir; onları düzenleyen ürün katmanıyla ilgilidir. Aşağıdaki bölümlerde, kodu denetlerken bulduğumuz tek gerçek istisna da dahil olmak üzere bu sınırın tam olarak nereden geçtiği ayrıntıları verilmektedir (Edge İşlevleri, bölüm 09).
18 kasa, bir derleme zinciri
Kök Cargo.toml, çözümleyici v2'de 18 üyeli bir Kargo çalışma alanı bildirir: 11 iş hizmeti, aura-cliCLI, 5 paylaşılan kitaplık ve aurabase-rsSDK. İşte depoda göründüğü şekliyle gerçek liste.
Paylaşılan bağımlılıklar [workspace.dependencies]'de bulunur: Axum 0.8 (WebSockets, çok parçalı, makrolarla), Tokio, Tower/Tower-HTTP, SQLx 0.8 (ikincil NoSQL motoru için mongodb aracılığıyla Postgres + MongoDB), async-nats 0.47, sqlparser 0.53 (NL2SQL'in SQL doğrulaması), oauth2 5, jsonwebtoken 10 ve neredeyse her hizmette iki performans kütüphanesi bulunur: genel ayırıcı olarak mimalloc ve bellek içi önbellek için moka/dashmap.
Sürüm profili varsayılan bir seçimi belgeliyor: "abort"yerine panic = "unwind" . Dosya yorumu kendi kendini açıklamaktadır - Axum/Tokio işleyicisindeki panik, tüm süreci çökertmek ve rakip istekleri kesmek yerine çalışma zamanı tarafından izole edilir (etkilenen istek 500 döndürür). Aynı nota göre,abort performans kazancı (RPS'nin yaklaşık %1 ila 2'si) yalıtım kaybına değmez. Bu, bir pazarlama iddiası değil, kodda belgelenen güvenilirlik-hız dengesidir.
Tek bir cargo build --workspace her şeyi derler. Tek bir cargo test --workspace tüm test paketini çalıştırır. Tek bir cargo clippy --workspace --all-targets -- -D warnings ürünün tamamını aynı kurallara göre sıralar. Bu yapının ayrıntıları - bağımlılıkların kalıtımı, kütüphaneler ve hizmetler arasındaki dahili grafik, onu büyütürken karşılaştığımız tuzaklar - özel bir makalenin konusudur: Kargo çalışma alanı mimarisi, çok hizmetli bir Rust arka ucunun nasıl yapılandırılacağı.
Hizmete göre pas hatları (hizmetleri bulun -name '*.rs' | xargs wc -l, 23 Ağustos 2026):
aura kontrolü
36 024
aura-db
30 255
aura-auth
28 431
aura sağlayıcı
28 271
aura bildirimleri
18 498
sahip olacak
18 305
aura ağ geçidi
16 938
aura-gerçek zamanlı
16 799
aura depolama
13 747
aura fonksiyonları
11 619
aura göçmeni
538
Paylaşılan kütüphaneler (aura-db-adapters: 24.725 satır, aura-core: 7.259, aura-migrations: 3.641, aura-crypto: 2.718, aura-telemetry: 201), CLI (aura-cli: 9.845) ve Rust SDK (aurabase-rs: 6.363) hariçtir. Tek kullanımlık bir geçiş işi olan ve uzun ömürlü bir HTTP sunucusu olmayan aura-migrator, kasıtlı olarak çalışma alanındaki en küçük hizmet olmaya devam ediyor.
Her biri bağımsız bir Axum sunucusu olan 11 iş hizmeti
Her hizmet, kendi konfigürasyonu ve bağlantı noktasıyla bağımsız bir Axum/Tokio ikilisidir. On birinden on tanesi /health ve /metrics'yi ortaya çıkarır ve mimalloc'yi genel ayırıcı olarak bildirir; tek istisna olan aura-migrator, sürekli çalışan bir sunucu yerine tek amaçlı bir iştir.
| aura ağ geçidi | Çift düzlemli ağ geçidi (veri:8080, yönetim:8090): diğer tüm hizmetlerin proxy'si. |
|---|---|
| aura-auth | Kimlik doğrulama: JWT, 15 adlandırılmış OAuth sağlayıcısı + proje başına genel OIDC, oturumlar, MFA. |
| aura-db | Veritabanı API'si: Kiracı başına PostgREST yönetimi/yeniden yükleme, Postgres ve MongoDB bağdaştırıcıları, CDC. |
| aura sağlayıcı | Proje yaşam döngüsü: tahsis edilmiş veya paylaşılan CNPG kümeleri, roller, kiracı başına PostgREST. |
| aura-gerçek zamanlı | WebSocket ve SSE, CDC yayını, NATS JetStream KV aracılığıyla örnekler arası varlık. |
| aura depolama | S3 uyumlu nesneler (MinIO), Postgres'ten aktarılabilen RLS politikaları. |
| aura fonksiyonları | Edge İşlevleri: dağıtım, işler, cron, yerel Wasmtime çalışma zamanı (bkz. bölüm 09). |
| aura bildirimleri | E-posta, push, giden web kancaları. |
| sahip olacak | NL2SQL, RAG ve LLM ağ geçidi (yerel OpenAI, Anthropic, Gemini + herhangi bir OpenAI uyumlu uç nokta). |
| aura göçmeni | Geçiş motoru: her sağlamada yeniden oynatılan tutma şemasının tek kaynağı. |
| aura kontrolü | Yönetim planı: geliştirici hesapları, kuruluşlar, faturalandırma, Studio API. |
aura CLI (≈ 9.800 satır), SDK'larla aynı API'lerle konuşur; ayrıcalıklı bir yolu yoktur. Her hizmetin tam referansı mimari belgelerinde ve CLI referansındabulunur.
Servisler arası kaymayı önleyen 5 kasa
Çok dilli bir yığında, bir güvenlik kuralının (hata formatı, SSRF koruması, hız sınırlama) her dilde yeniden uygulanması gerekir ve neredeyse her zaman aylar boyunca değişiklik gösterir. Aurabase bunu bir kez, ilgili tüm hizmetler tarafından tüketilen bir çalışma alanı kütüphanesinde kodlar.
| aura çekirdeği | 7 259 l. | Paylaşılan temel öğeler: hatalar, API yanıt zarfı, JWT talepleri, dahili hizmetten hizmete kimlik doğrulama, NATS yardımcıları, hız sınırlama, SSRF korumalı HTTP istemcisi, devre kesici, kiracı çözümü, ölçüm. |
|---|---|---|
| aura-db-adaptörler | 24 725 l. | Aura-db tarafından kullanılan birleşik veritabanını, Postgres ve MongoDB uygulamalarını uyarlama özelliği. |
| aura-kripto | 2 718 l. | Parola karma, belirteç oluşturma, JWT imzalama/doğrulama, alan düzeyinde şifreleme. |
| aura göçleri | 3 641 l. | Geçiş motoru — sağlayıcı tarafından yeniden oynatılan kiracı şemasının tek kaynağı (her hizmet için geçişler/belirli klasörler değil). |
| aura telemetrisi | 201 l. | 11 hizmet tarafından paylaşılan OpenTelemetry + izleme yapılandırması. |
Doğrudan sonuç: aura-core içindeki bir güvenlik yaması - örneğin SSRF koruması - beş dilde beş ayrı yama yoluyla değil, sonraki cargo buildiçindeki her tüketici hizmetine yayılır.
İkili plan: SDK trafiği ve Studio trafiği
aura-gateway, aynı istemcilere veya aynı kimlik doğrulama modeline sahip olmayan iki yüzeyi ayırır. Veri düzlemi (bağlantı noktası 8080, değişken GATEWAY_PORT), API anahtarı (apikey, X-API-Key veya ?apikey=) tarafından kimliği doğrulanan SDK/uygulama trafiğini alır. Yönetim düzlemi (bağlantı noktası 8090, MANAGEMENT_PORT), JWT konsolu (Authorization: Bearer) tarafından kimliği doğrulanan Studio/yönetici trafiğini alır.
Her düzlem, birbirine aynı şekilde güvenmemesi gereken iki yüzey arasında yanlışlıkla paylaşılan tek bir zincir yerine, ayrı modüllerde (middleware/rate_limit.rs, middleware/circuit_breaker.rs, middleware/auth_data_plane.rs, middleware/auth_management_plane.rs) uygulanan sorgu tanımlama, erişim günlüğü, hız sınırı, kimlik doğrulama (düzlece özgü), devre kesici ve ardından proxy gibi kendi ara yazılım yığınını taşır. yol.
Ara yazılımların tam sırası, hedef başına hız sınırlaması ve NATS/HTTP proxy'si özel bir makalenin konusudur: çift düzlemli ağ geçidi, Rust'ta bir veri düzlemi/yönetim düzlemi API ağ geçidi tasarlayın.
Aurabase neden PostgREST'i Rust'ta yeniden uygulamıyor?
SDK'nın kullandığı, kendi kendine oluşturulan REST API, şirket içi bir Rust modülü değildir: tahsis edilmiş proje başına 2 kopya halinde dağıtılan (deploy/cnpg/tenant-postgrest.yaml), kiracının CNPG örneğiyle birlikte konumlanan gerçek yukarı akış ikili dosyası PostgREST (postgrest/postgrest:v12.2.8)'dir. aura-provisioner bu dağıtımı oluşturur ve aura-db, PostgREST'in DDL değişikliğini hesaba kattığını doğrulamak için her şema yeniden yüklemesinden sonra OPTIONS uç noktasını araştırır.
Bu, bir kısayol değil, varsayılan bir mimari tercihtir: PostgREST, Rust'ta yavaş yavaş yeniden yazılan davranışları hiçbir şey getirmeyecek olgun, yaygın olarak benimsenmiş bir projedir. Aurabase'in Rust çalışması, sorgu motorunun içine değil, çok kiracılı yönlendirme, provizyon, NetworkPolicy ile ağ izolasyonu, ağ geçidi ile paylaşılan kimlik doğrulama, düzenlenmiş şema yeniden yükleme gibi konulara odaklanır. Bu uyumluluğun gerçekte neyi kapsadığı ve nerede bittiği ayrı bir makalenin konusudur: PostgREST, gerçek uyumluluk vealternatifleri.
GraphQL tarafında da aynı mantık: Postgres uzantısı pg_graphql (önceden derlenmiş .deb paketi, v1.6.1) özel CNPG görüntüsüne yüklenir ve talep üzerine proje başına POST /v1/control/projects/{project_id}/graphql/enable uç noktası aracılığıyla etkinleştirilir; yeniden yazılmış bir GraphQL motoru da değildir. Ayrıntılar ve Hasura ve PostGraphile ile dürüst karşılaştırma: Postgres'te pg_graphqlile Yerel GraphQL API.
Bir uygulama katmanı değil, RLS ve kimlik doğrulayıcı rolü
Çok kiracılı yalıtım, bir uygulama ORM'si tarafından eklenen WHERE tenant_id = ? filtresine dayanmaz: her istek, isteği yürütmeden önce SET LOCAL ROLE tenant_<uuid> işlem kapsamlı bir işlemi yürüten aura_authenticatorrolünden geçer - tam olarak PostgREST'in beklediği model. Satır Düzeyinde Güvenlik, gerisini iş kodu düzeyinde değil, motor düzeyinde yapar.
Tüm projeler aynı Postgres topolojisini paylaşmaz. aura-provisioner kodu, en az iki gerçek değişkene sahip bir ProjectInstanceKind türünü ortaya çıkarır: FullyDedicated (tamamen projeye ayrılmış CNPG örneği) ve SharedClusterDedicated (paylaşılan bir CNPG kümesinde RLS tarafından izole edilen şema). Abone olunan plan topolojiyi belirler; bu, "herkese özel bir taban" yönünde tek tip bir vaat değildir.
"Neden tamamen uygulama izolasyonu yerine proje başına özel bir taban" açısı özel bir makalenin konusudur: RLS ve proje başına özel taban. Satır Düzeyinde Güvenlik belgeleri pratik uygulamayı kapsar.
NATS çekirdeği, JetStream değil: hizmetler arasında eşzamansız mesajlaşma
On bir iş hizmetinden on tanesi async-nats'yi Cargo.toml'ye doğrudan bağımlılık olarak bildirir; yalnızca aura-migrator bu olmadan yapar. Bu sandık adının söylemediği şey: Bu hizmetler neredeyse her yerde [JetStream değil, NATS'ninçekirdek pub/sub API'sini (Client::publish / publish_with_headers, en fazla bir kez teslimat kullanır) kullanır](https://docs.nats.io/nats-concepts/jetstream). Bu, en önemli üç kullanım için kodda doğrulanan durumdur: PostgreSQL CDC'nin aura-realtime'ye dağıtımı, aura-functions'deki Edge Functions işlerinin bildirimi (DLQ'nun kendisi NATS'de değil Postgres'te bulunur) ve aura-provisioner ile filonun geri kalanı arasındaki olayların provizyonu.
JetStream - NATS'in kalıcılığı ve adlandırılmış akış modu - monorepo'da yalnızca tek bir doğrulanmış konumda görünür: aura-realtime içindeki çapraz örnek varlığı KV Mağazası (kova aura_presence, bellek deposu, 60 saniyelik max_age), birden fazla ws-front örneğinde kimin hangi kanala bağlı olduğunu senkronize eder - bir çapraz örnek paylaşım durumu, bir akış değil tekrarlanacak olaylar. Çalışma alanının başka bir yerinde kalıcı JetStream akışı bulunamadı. CDC hattının ayrıntıları - wal2json, Lease Kubernetes tarafından benzersiz bir cdc-worker seçimi, ws-frontkopyalarına çekirdek NATS dağıtımı, abone tarafından RLS'nin yeniden doğrulanması - özel bir makalenin konusudur: , PostgreSQL CDC'yi NATSile yayınladı. Gerçek zamanlı belgeler, SDK tarafındaki kullanımı kapsar.
Edge İşlevleri: iki ihtiyaç için iki çalışma zamanı
Bu, bu dosyanın en önemli nüansıdır ve Aurabase ürün kodundaki saf Rust'tan tek gerçek farklılıktır. Her işlev, "wasm" veya "deno"değerinde bir runtime alanı taşır. Çağırma işleyicisi yürütme yolunu buna göre seçer - kodun kendisinde yorumlanan gerçek kod parçası:
The wasm mode is native: aura-functions depends directly on Wasmtime (version 43, features async and cranelift) and executes the module in the same Rust process, with fuel counting, interruption by epoch and memory bounding via StoreLimits. The deno mode — the one used by default in the Studio editor, for almost direct Deno.serve() compatibility with existing Supabase code — delegates execution to aura-edge-runtime, a separate TypeScript service of about 550 lines, explicitly modeled — the source file header comment itself cites it — on supabase/edge-runtime (MIT license), which isolates each invocation into its own V8 Isolate.
Kontrol (dağıtım, izinler, işler, cron, kotalar) aura-functions'de tamamen Rust'ta kalır. Kullanıcı kodunun yalnızca deno modunda çalıştırılması Rust ikili dosyasından çıkar. Bu, savunulabilir bir mühendislik uzlaşmasıdır (V8 İzolatları, Deno'nun bu düzeyde sanal alan oluşturma için doğal olarak sağladığı şeydir), sessiz kalmayı tercih ettiğimiz bir ihmal değildir. Yakında bu dosyada yer alacak olan Wasmtime ve Wasmer karşılaştırması ve WebAssembly soğuk başlangıç analizi bu konuyu daha da ileriye taşıyacaktır.
Her iki dağıtım yoluna ilişkin nasıl yapılır belgesi için bkz. Edge Functions. Supabase'den Deno geçiş taktik kitabı için, bu dosyadan önce bu ayrımı zaten belgeleyen Bir Supabase projesini Aurabase'e geçirmekonusuna bakın.
Bu birleşik kalp sizin için somut olarak neyi değiştiriyor?
API'yi yalnızca bir SDK aracılığıyla çağırırsanız bu mimari görünmez; amaç da budur. Temel olarak üç hedef kitle için önemlidir: üretim verilerini buna taşımadan önce çok kiracılı bir arka ucun operasyonel güvenilirliğini değerlendirenler, depoya katkıda bulunmayı planlayanlar (MIT, tek monorepo) ve Aurabase tarafındaki bir güvenlik yamasının neden yavaş yerine hızlı bir şekilde yayıldığını anlamak isteyenler.
Somut olarak: tek bir IC (cargo build --workspace, cargo test --workspace, cargo clippy --workspace --all-targets -- -D warnings) ürün yüzeyinin %90 veya daha fazlasını kaplar. aura-core üzerinde yapılan bir kod incelemesi potansiyel olarak aynı anda on hizmeti etkileyebilir; hem daha iyi (bir düzeltme yol boyunca kaybolmaz) hem de daha kötü (kötü izole edilmiş bir değişiklik aynı hızla yayılır). Bu, sihirli bir çözüm değil, bir uzlaşmadır ve tam da bu nedenle, bir pazarlama özeti yerine gerçek mimariyi belgeliyoruz.
Rust Mühendislik dosyasının geri kalanı
Bu sütun sayfası, yayınlandıkça kümenin teknik analizlerine bağlantı verir. Bu sayfanın yayınlandığı andaki gerçek durum - ilgili makale çevrimiçi olur olmaz bağlantılar aktif hale gelir.
Küme A — Çerçeve ve mimari
Axum ve Actix-web: Üretimde Rust arka ucu için hangi çerçeve?Yayınlandı
Kargo çalışma alanı mimarisi: çoklu hizmet Rust arka ucunun nasıl yapılandırılacağıYayınlandı
Çift düzlemli ağ geçidi: Rust'ta bir veri düzlemi/yönetim düzlemi API ağ geçidi tasarlamaYayınlandı
Küme B — Postgres'te kendi kendine oluşturulan API
PostgREST: uyumluluk gerçekte neleri kapsar ve hangi alternatifler mevcutturYayınlandı
Postgres'te pg_graphql ile Yerel GraphQL API'si: Hasura ve PostGraphile'ın aynısını yapmadığı şeyYayınlandı
RLS ve proje başına özel taban: Aurabase'den çok kiracılı yalıtım seçimiYayınlandı
C Grubu — Gerçek zamanlı ve mesajlaşma
PostgreSQL CDC'yi NATS ile dağıtın: gerçek zamanlı mimariYayınlandı
Küme D — Kenar İşlevleri WebAssembly
| Wasmtime ve Wasmer: üretimde Edge Functions için hangi WebAssembly çalışma zamanı | Yakında |
|---|---|
| Rust/WASM'de Cloudflare Workers ve Vercel Edge'de Edge İşlevleri | Yakında |
| Soğuk Başlangıç WebAssembly: Kriterlerin gerçekte söyledikleri (ve henüz söyleyemediklerimiz) | Yakında |
Küme E — Geçiş ve alternatifler
RLS politikalarınızı yeniden yazmadan bir Supabase projesini Aurabase'e taşıyınYayınlandı
Bağımsız kendi kendine barındırma: Aurabase'i Rust'ta yerleşik BaaS'a karşı konumlandırmaÇok yakında