PRODसंप्रभु यूरोपीय BaaS मंचडैशबोर्ड खोलें →

इंजीनियरिंग · 15 मिनट पढ़ा

Aurabase का Rust कोर: एक एकीकृत बैकएंड-ए-ए-सर्विस

Affane Daylami · Fondateur · 16 अगस्त 2026

ब्लॉग पर वापस जाएँ

ऑराबेस रस्ट में लिखी गई एक बैकएंड-ए-ए-सर्विस है - न केवल कुछ परिधीय सेवाओं के लिए, बल्कि इसके संपूर्ण एप्लिकेशन कोर के लिए: गेटवे, प्रमाणीकरण, डेटाबेस, वास्तविक समय, भंडारण, सूचनाएं, एआई, प्रावधान। रिपॉजिटरी के मूल में कार्गो वर्कस्पेस एक कार्गो बिल्ड-वर्कस्पेस द्वारा एक साथ संकलित 18 क्रेट्स को सूचीबद्ध करता है, जिसमें उत्पाद तर्क के पीछे कोई तृतीय-पक्ष भाषा छिपी नहीं होती है।

यह अंग्रेजी पाठ फ़्रेंच मूल से स्वचालित रूप से उत्पन्न हुआ था और अभी तक इसकी समीक्षा नहीं की गई है।
यह पृष्ठ स्वचालित रूप से अनुवादित किया गया था. अंग्रेजी संस्करण प्रामाणिक है.

यह फ़ाइल इस आर्किटेक्चर का दस्तावेजीकरण करती है क्योंकि यह वास्तव में कोड में मौजूद है, 23 अगस्त, 2026 तक सत्यापित फ़ाइल दर फ़ाइल - आरेख, आंकड़े और उद्धरण शामिल हैं। यह "रस्ट इंजीनियरिंग" क्लस्टर का स्तंभ पृष्ठ है: यह प्रकाशित या प्रकाशित होने की प्रक्रिया में गहन तकनीकी विश्लेषण (एक्सम, कार्गो वर्कस्पेस, गेटवे, पोस्टग्रेस्ट, pg_graphql, और बाकी फ़ाइल) का अवलोकन और लिंक देता है। प्रतिस्पर्धी BaaS के विरुद्ध संपूर्ण उत्पाद तुलना के लिए, हमारी तुलना Aurabase बनाम Supabaseदेखें।

अनिवार्य है

  • सिंगल वर्कस्पेस कार्गो: 18 क्रेट (11 व्यावसायिक सेवाएँ, auraCLI, 5 साझा लाइब्रेरी, रस्ट SDK) एक cargo build --workspaceद्वारा एक साथ संकलित।
  • व्यवसाय कोड का वजन लगभग 274,000 रस्ट लाइनों (find + wc -l, 23 अगस्त, 2026 के माध्यम से मापा गया) का है, जो इन 18 बक्सों में वितरित की गई हैं।
  • गेटवे (aura-gateway) दो विमानों को अलग करता है - डेटा (एसडीके, पोर्ट 8080) और प्रबंधन (स्टूडियो, पोर्ट 8090) - प्रत्येक अपने स्वयं के मिडलवेयर स्टैक और प्रमाणीकरण के साथ।
  • ऑराबेस पोस्टग्रैस्ट को फिर से नहीं लिखता है: वास्तविक अपस्ट्रीम बाइनरी (v12.2.8) प्रति किरायेदार चलता है, रस्ट सेवाओं द्वारा ऑर्केस्ट्रेटेड - जोड़ा गया मूल्य इसके आसपास है, इसके बजाय नहीं।
  • प्योर रस्ट से एकमात्र उल्लेखनीय प्रस्थान: एज फ़ंक्शंस का डिफ़ॉल्ट रनटाइम (denoमोड) V8 आइसोलेट्स पर आधारित एक समर्पित टाइपस्क्रिप्ट सेवा है; एक दूसरा पथ, मूल और वास्मटाइम के माध्यम से रस्ट में, wasmमोड के लिए मौजूद है।
18
कार्यस्थल टोकरे
11 सेवाएँ + सीएलआई + 5 लिब + रस्ट एसडीके
~274k
जंग रेखाएँ
ढूंढें + डब्ल्यूसी -एल, 23 ​​अगस्त, 2026
2
गेटवे योजनाएँ
डेटा: 8080 · प्रबंधन: 8090
10/11
NATS पर सेवाएँ
प्रत्यक्ष निर्भरता में async-nats
#
पोजिशनिंग

सेवा द्वारा ऑराबेस को BaaS असेंबल की गई सेवा से क्या अलग करता है

अधिकांश ओपन सोर्स पोस्टग्रेज़ BaaS अपनी सेवाओं को कई भाषाओं में पैकेज करते हैं। यह एक मूल्य निर्णय नहीं है - यह एक वास्तुशिल्प तथ्य है जिसके ठोस परिणाम हैं: सिंक्रनाइज़ेशन में रखने के लिए कई संकलन श्रृंखलाएं, त्रुटि सम्मेलन और ऑथ तर्क जैसे कि खेल में भाषाएं हैं।

ऑराबेस में, उत्पाद परत जिसे हम लिखते हैं और स्वयं बनाए रखते हैं - गेटवे, ऑथ, डेटाबेस, वास्तविक समय, भंडारण, सूचनाएं, एआई, प्रावधान, खाता प्रबंधन - एक एकल कार्गो कार्यक्षेत्र, एक एकल भाषा, एक एकल निर्माण श्रृंखला है। यह विकल्प है कि यह फ़ाइल दस्तावेज़ बनाती है.

आवश्यक परिशुद्धता

"एकीकृत कोर" का मतलब यह नहीं है कि उत्पादन में चल रही हर चीज़ जंग है। किसी भी Postgres BaaS की तरह, Aurabase भी ओपन सोर्स बिल्डिंग ब्लॉक्स पर निर्भर करता है जो उसने नहीं लिखे: PostgreSQL स्वयं, PostgREST, NATS। विषम स्टैक के साथ संरचनात्मक अंतर इन साझा बिल्डिंग ब्लॉकों से संबंधित नहीं है - यह उत्पाद परत से संबंधित है जो उन्हें व्यवस्थित करता है। निम्नलिखित अनुभाग विवरण देते हैं कि वास्तव में यह सीमा कहां से गुजरती है, जिसमें कोड का ऑडिट करते समय हमें मिला एकमात्र वास्तविक अपवाद भी शामिल है (एज फ़ंक्शंस, अनुभाग 09)।

#
कार्यक्षेत्र

18 टोकरे, एक संकलन श्रृंखला

रूट Cargo.toml 18 सदस्यों के साथ रिज़ॉल्वर v2 में एक कार्गो वर्कस्पेस घोषित करता है: 11 व्यावसायिक सेवाएँ, aura-cliCLI, 5 साझा लाइब्रेरी और aurabase-rsSDK। यहां वास्तविक सूची है, जैसा कि भंडार में दिखाई देता है।

Cargo.tomltoml
[workspace]
resolver = "2"

members = [
    # सेवाएँ (11)
    "services/aura-gateway", "services/aura-auth", "services/aura-db",
    "services/aura-provisioner", "services/aura-realtime", "services/aura-storage",
    "services/aura-functions", "services/aura-notifications", "services/aura-ai",
    "services/aura-migrator", "services/aura-control",
    # औजार
    "aura-cli",
    # लिब्ज़ (5)
    "libs/aura-core", "libs/aura-crypto", "libs/aura-db-adapters",
    "libs/aura-migrations", "libs/aura-telemetry",
    "aurabase-rs",
]

साझा निर्भरताएँ [workspace.dependencies]में रहती हैं: Axum 0.8 (WebSockets, मल्टीपार्ट, मैक्रोज़ के साथ), टोकियो, टॉवर/टॉवर-HTTP, SQLx 0.8 (माध्यमिक NoSQL इंजन के लिए mongodb के माध्यम से Postgres + MongoDB), async-nats 0.47, sqlparser 0.53 (NL2SQL का SQL सत्यापन), oauth2 5, jsonwebtoken 10, और दो प्रदर्शन libs लगभग हर सेवा में पाए जाते हैं: mimalloc एक वैश्विक आवंटनकर्ता के रूप में और moka/dashmap इन-मेमोरी कैश के लिए।

रिलीज़ प्रोफ़ाइल एक कल्पित विकल्प का दस्तावेजीकरण करती है: "abort"के बजाय panic = "unwind"। फ़ाइल टिप्पणी स्व-व्याख्यात्मक है - पूरी प्रक्रिया को नीचे लाने और प्रतिस्पर्धी अनुरोधों को काटने के बजाय एक्सम/टोकियो हैंडलर में घबराहट को रनटाइम (प्रभावित अनुरोध 500 लौटाता है) द्वारा अलग किया जाता है। इसी नोट के अनुसार,abort (आरपीएस का लगभग 1 से 2%) का प्रदर्शन लाभ इन्सुलेशन के नुकसान के लायक नहीं है। यह एक विश्वसनीयता-बनाम-स्पीड ट्रेड-ऑफ है जिसे कोड में दर्ज किया गया है, न कि कोई मार्केटिंग दावा।

एक cargo build --workspace पूरी चीज़ को संकलित करता है। एक एकल cargo test --workspace संपूर्ण परीक्षण सूट चलाता है। एक एकल cargo clippy --workspace --all-targets -- -D warnings पूरे उत्पाद को समान नियमों के साथ जोड़ता है। इस संरचना का विवरण - निर्भरता की विरासत, libs और सेवाओं के बीच आंतरिक ग्राफ, इसे विकसित करते समय हमारे सामने आने वाले नुकसान - एक समर्पित लेख का विषय हैं: कार्गो वर्कस्पेस आर्किटेक्चर, मल्टी-सर्विस रस्ट बैकएंड की संरचना कैसे करें।

सेवा द्वारा जंग रेखाएँ (सेवाएँ खोजें -नाम '*.rs' | xargs wc -l, 23 अगस्त, 2026):

आभा-नियंत्रण

36 024

आभा-डीबी

30 255

आभा-प्रामाणिक

28 431

आभा-प्रदाता

28 271

आभा-सूचनाएँ

18 498

होगा

18 305

आभा-द्वार

16 938

आभा-वास्तविक समय

16 799

आभा-भंडार

13 747

आभा-कार्य

11 619

आभा-प्रवासी

538

साझा लिब्ज़ (ऑरा-डीबी-एडेप्टर: 24,725 लाइनें, ऑरा-कोर: 7,259, ऑरा-माइग्रेशन: 3,641, ऑरा-क्रिप्टो: 2,718, ऑरा-टेलीमेट्री: 201), सीएलआई (ऑरा-सीएलआई: 9,845) और रस्ट एसडीके (ऑराबेस-आरएस: 6,363) को छोड़कर। ऑरा-माइग्रेटर, एक एकल-उपयोग माइग्रेशन कार्य और लंबे समय तक चलने वाला HTTP सर्वर नहीं, जानबूझकर कार्यक्षेत्र में सबसे छोटी सेवा बनी हुई है।

#
सेवाएं

11 व्यावसायिक सेवाएँ, प्रत्येक एक स्टैंडअलोन एक्सम सर्वर

प्रत्येक सेवा अपने स्वयं के कॉन्फ़िगरेशन और पोर्ट के साथ एक स्वतंत्र एक्सम/टोकियो बाइनरी है। ग्यारह में से दस /health और /metrics को उजागर करते हैं और mimalloc को वैश्विक आवंटनकर्ता घोषित करते हैं - एकमात्र अपवाद, aura-migrator, लगातार चलने वाले सर्वर के बजाय एकल-उद्देश्यीय कार्य है।

आभा-द्वारडुअल-प्लेन गेटवे (डेटा:8080, प्रबंधन:8090): अन्य सभी सेवाओं के लिए प्रॉक्सी।
आभा-प्रामाणिकप्रमाणीकरण: JWT, 15 नामित OAuth प्रदाता + सामान्य OIDC प्रति प्रोजेक्ट, सत्र, MFA।
आभा-डीबीडेटाबेस एपीआई: पोस्टग्रेस्ट प्रबंधन/प्रति किरायेदार पुनः लोड, पोस्टग्रेज और मोंगोडीबी एडाप्टर, सीडीसी।
आभा-प्रदातापरियोजना जीवन चक्र: समर्पित या साझा सीएनपीजी क्लस्टर, भूमिकाएँ, प्रति किरायेदार पोस्टग्रेस्ट।
आभा-वास्तविक समयवेबसॉकेट और एसएसई, सीडीसी प्रसारण, एनएटीएस जेटस्ट्रीम केवी के माध्यम से क्रॉस-इंस्टेंस उपस्थिति।
आभा-भंडारS3 संगत ऑब्जेक्ट (MinIO), Postgres से हस्तांतरणीय RLS नीतियां।
आभा-कार्यएज फ़ंक्शंस: परिनियोजन, नौकरियां, क्रॉन, मूल वासटाइम रनटाइम (अनुभाग 09 देखें)।
आभा-सूचनाएँईमेल, पुश, आउटगोइंग वेबहुक।
होगाNL2SQL, RAG और LLM गेटवे (मूल OpenAI, एंथ्रोपिक, जेमिनी + कोई भी OpenAI संगत समापन बिंदु)।
आभा-प्रवासीमाइग्रेशन इंजन: प्रत्येक प्रावधान पर होल्डिंग स्कीमा का एकल स्रोत पुनः चलाया जाता है।
आभा-नियंत्रणप्रबंधन योजना: डेवलपर खाते, संगठन, बिलिंग, स्टूडियो एपीआई।

aura CLI (≈ 9,800 लाइनें) SDKs के समान API से बात करती है - इसका कोई विशेषाधिकार प्राप्त पथ नहीं है। प्रत्येक सेवा का पूरा संदर्भ आर्किटेक्चर दस्तावेज़ और CLI संदर्भमें रहता है।

#
साझा पुस्तकालय

5 क्रेट जो अंतर-सेवा बहाव से बचते हैं

पॉलीग्लॉट स्टैक में, एक सुरक्षा नियम - त्रुटि प्रारूप, एसएसआरएफ सुरक्षा, दर सीमित करना - प्रत्येक भाषा में फिर से लागू किया जाना चाहिए, और लगभग हमेशा महीनों में बदलता रहता है। ऑराबेस इसे वर्कस्पेस लिब में एक बार कोड करता है, जिसका उपभोग सभी संबंधित सेवाओं द्वारा किया जाता है।

आभा-केंद्र7 259 l.साझा किए गए आदिम: त्रुटियां, एपीआई प्रतिक्रिया लिफाफा, जेडब्ल्यूटी दावे, आंतरिक सेवा-से-सेवा प्राधिकरण, एनएटीएस सहायक, दर सीमित करना, एसएसआरएफ संरक्षित HTTP क्लाइंट, सर्किट ब्रेकर, किरायेदार रिज़ॉल्यूशन, मीटरिंग।
आभा-डीबी-एडेप्टर24 725 l.ऑरा-डीबी द्वारा उपयोग किए जाने वाले एकीकृत डेटाबेस, पोस्टग्रेज और मोंगोडीबी कार्यान्वयन को अनुकूलित करने की विशेषता।
आभा-क्रिप्टो2 718 l.पासवर्ड हैशिंग, टोकन जनरेशन, जेडब्ल्यूटी हस्ताक्षर/सत्यापन, फ़ील्ड-स्तरीय एन्क्रिप्शन।
आभा-प्रवास3 641 l.माइग्रेशन इंजन - किरायेदार स्कीमा का एकल स्रोत, प्रावधानकर्ता द्वारा पुनः चलाया गया (प्रत्येक सेवा के लिए माइग्रेशन/विशिष्ट फ़ोल्डर नहीं)।
आभा-टेलीमेट्री201 l.ओपनटेलीमेट्री + ट्रेसिंग कॉन्फ़िगरेशन, 11 सेवाओं द्वारा साझा किया गया।

प्रत्यक्ष परिणाम: aura-core में एक सुरक्षा पैच - उदाहरण के लिए, SSRF सुरक्षा - अगले cargo buildमें प्रत्येक उपभोक्ता सेवा तक प्रसारित होता है, न कि पांच भाषाओं में पांच अलग-अलग पैच के माध्यम से।

#
प्रवेशद्वार

दोहरी योजना: एसडीके ट्रैफ़िक बनाम स्टूडियो ट्रैफ़िक

aura-gateway दो सतहों को अलग करता है जिनके न तो समान क्लाइंट हैं और न ही समान ऑथ मॉडल। डेटा प्लेन (पोर्ट 8080, वेरिएबल GATEWAY_PORT) SDK/ऐप ट्रैफ़िक प्राप्त करता है, जो API कुंजी (apikey, X-API-Key या ?apikey=) द्वारा प्रमाणित होता है। प्रबंधन विमान (पोर्ट 8090, MANAGEMENT_PORT) स्टूडियो/एडमिन ट्रैफ़िक प्राप्त करता है, जो JWT कंसोल (Authorization: Bearer) द्वारा प्रमाणित होता है।

gateway/routes.rsrust
// डेटा प्लेन - एपीआई कुंजी
.route("/v1/auth/{*path}", any(auth_proxy))
.route("/v1/db/{*path}", any(db_proxy))
.route("/v1/realtime/ws", get(realtime_ws_proxy))
.route("/v1/realtime/sse", get(realtime_sse_proxy))
.route("/v1/storage/{*path}", any(storage_proxy))
.route("/v1/notifications/{*path}", any(notifications_proxy))
.route("/v1/ai/{*path}", any(ai_dispatcher))
.route("/v1/functions/{*path}", any(functions_proxy))

// प्रबंधन योजना - जेडब्ल्यूटी कंसोल
.route("/v1/control/{*path}", any(control_proxy))

प्रत्येक विमान में मिडलवेयर का अपना ढेर होता है - क्वेरी पहचान, एक्सेस लॉग, दर सीमा, प्रमाणीकरण (विमान-विशिष्ट), सर्किट ब्रेकर, फिर प्रॉक्सी - अलग-अलग मॉड्यूल (middleware/rate_limit.rs, middleware/circuit_breaker.rs, middleware/auth_data_plane.rs, middleware/auth_management_plane.rs) में कार्यान्वित किया जाता है, न कि दो सतहों के बीच गलती से साझा की गई एक श्रृंखला के बजाय, जिन्हें एक-दूसरे पर समान रूप से भरोसा नहीं करना चाहिए। रास्ता।

मिडलवेयर का सटीक क्रम, प्रति लक्ष्य सीमित दर और NATS/HTTP प्रॉक्सी एक समर्पित लेख का विषय हैं: डुअल-प्लेन गेटवे, रस्ट में डेटा-प्लेन/मैनेजमेंट-प्लेन एपीआई गेटवे डिज़ाइन करें।

#
आंकड़ा

ऑराबेस रस्ट में PostgREST को दोबारा लागू क्यों नहीं करता है

SDK द्वारा उपभोग की जाने वाली स्व-निर्मित REST API एक इन-हाउस रस्ट मॉड्यूल नहीं है: यह वास्तविक अपस्ट्रीम बाइनरी PostgREST (postgrest/postgrest:v12.2.8) है, जो प्रति समर्पित प्रोजेक्ट (deploy/cnpg/tenant-postgrest.yaml) में 2 प्रतिकृतियों में तैनात है, जो किरायेदार के CNPG इंस्टेंस के साथ सह-स्थित है। aura-provisioner यह परिनियोजन बनाता है, और aura-db प्रत्येक स्कीमा पुनः लोड के बाद इसके समापन बिंदु OPTIONS की जांच करता है ताकि यह पुष्टि हो सके कि PostgREST ने DDL परिवर्तन को ध्यान में रखा है।

यह एक अनुमानित वास्तुशिल्प विकल्प है, कोई शॉर्टकट नहीं: PostgREST एक परिपक्व, व्यापक रूप से अपनाया गया प्रोजेक्ट है, जिसके व्यवहार को रस्ट में थोड़ा-थोड़ा करके फिर से लिखने से कुछ नहीं मिलेगा। ऑराबेस का रस्ट कार्य चारों ओर केंद्रित है - मल्टी-टेनेंट रूटिंग, प्रोविजनिंग, नेटवर्कपॉलिसी द्वारा नेटवर्क अलगाव, गेटवे के साथ साझा प्रमाणीकरण, ऑर्केस्ट्रेटेड स्कीमा रीलोड - क्वेरी इंजन के अंदर ही नहीं। यह अनुकूलता वास्तव में क्या कवर करती है, और यह कहां रुकती है, यह एक अलग लेख का विषय है: PostgREST, वास्तविक अनुकूलता औरविकल्प।

ग्राफक्यूएल पक्ष पर समान तर्क: पोस्टग्रेज एक्सटेंशन pg_graphql (पूर्व संकलित .deb पैकेज, v1.6.1) समर्पित सीएनपीजी छवि में स्थापित किया गया है और POST /v1/control/projects/{project_id}/graphql/enable एंडपॉइंट के माध्यम से प्रति प्रोजेक्ट मांग पर सक्रिय किया गया है - या तो फिर से लिखा गया ग्राफक्यूएल इंजन नहीं है। हसुरा और पोस्टग्राफाइल के साथ विवरण और ईमानदार तुलना: pg_graphqlके साथ पोस्टग्रेज पर नेटिव ग्राफक्यूएल एपीआई।

#
इन्सुलेशन

आरएलएस और प्रमाणक भूमिका, अनुप्रयोग परत नहीं

बहु-किरायेदार अलगाव किसी एप्लिकेशन ORM द्वारा जोड़े गए WHERE tenant_id = ? फ़िल्टर पर निर्भर नहीं करता है: प्रत्येक अनुरोध aura_authenticatorभूमिका से गुजरता है, जो अनुरोध को निष्पादित करने से पहले SET LOCAL ROLE tenant_<uuid> लेनदेन-स्कोप को निष्पादित करता है - बिल्कुल वही मॉडल जो PostgREST स्वयं अपेक्षा करता है। पंक्ति-स्तरीय सुरक्षा बाकी काम इंजन स्तर पर करती है, व्यवसाय कोड स्तर पर नहीं।

सभी प्रोजेक्ट समान पोस्टग्रेज़ टोपोलॉजी साझा नहीं करते हैं। aura-provisioner कोड कम से कम दो वास्तविक वेरिएंट के साथ ProjectInstanceKind प्रकार को उजागर करता है: FullyDedicated (CNPG उदाहरण पूरी तरह से परियोजना के लिए समर्पित) और SharedClusterDedicated (एक साझा CNPG क्लस्टर पर RLS द्वारा अलग किया गया स्कीमा)। सदस्यता प्राप्त योजना टोपोलॉजी निर्धारित करती है - यह "सभी के लिए समर्पित आधार" का एक समान वादा नहीं है।

अस्टुसे

कोण "विशुद्ध रूप से अनुप्रयोग अलगाव के बजाय प्रति प्रोजेक्ट एक समर्पित आधार क्यों" एक समर्पित लेख का विषय है: RLS और प्रति प्रोजेक्ट समर्पित आधार। पंक्ति-स्तरीय सुरक्षा दस्तावेज़ व्यावहारिक कार्यान्वयन को शामिल करता है।

#
संदेश

NATS कोर, जेटस्ट्रीम नहीं: सेवाओं के बीच अतुल्यकालिक संदेश

ग्यारह व्यावसायिक सेवाओं में से दस async-nats को अपने Cargo.toml में प्रत्यक्ष निर्भरता के रूप में घोषित करती हैं - केवल aura-migrator इसके बिना काम करती है। यह क्रेट नाम क्या नहीं कहता है: ये सेवाएँ लगभग हर जगह NATS केकोर पब/सब एपीआई (Client::publish / publish_with_headers, बिना दृढ़ता या रीप्ले के अधिकतम एक बार डिलीवरी) का उपयोग करती हैं, न कि जेटस्ट्रीमका। यह उन तीन उपयोगों के लिए कोड में सत्यापित मामला है जो सबसे अधिक मायने रखते हैं: PostgreSQL CDC का aura-realtimeमें वितरण, aura-functions में एज फ़ंक्शंस नौकरियों की अधिसूचना (DLQ स्वयं Postgres में रहता है, NATS में नहीं), और aura-provisioner और बाकी बेड़े के बीच घटनाओं का प्रावधान।

जेटस्ट्रीम - NATS की दृढ़ता और नामित स्ट्रीम मोड - मोनोरेपो में केवल एक सत्यापित स्थान पर दिखाई देता है: aura-realtime (बकेट aura_presence, मेमोरी स्टोर, 60-सेकंड max_age) में क्रॉस-इंस्टेंस उपस्थिति KV स्टोर, जो सिंक्रनाइज़ करता है कि ws-front के कई उदाहरणों में कौन किस चैनल से जुड़ा है - एक क्रॉस-इंस्टेंस साझा स्थिति, फिर से चलाने के लिए घटनाओं की एक धारा नहीं। कार्यक्षेत्र में कहीं और कोई स्थायी जेटस्ट्रीम स्ट्रीम नहीं पाई गई। सीडीसी पाइपलाइन का विवरण - wal2json, लीज कुबेरनेट्स द्वारा एक अद्वितीय cdc-worker का चुनाव, ws-frontप्रतिकृतियों के लिए कोर NATS फैन-आउट, ग्राहक द्वारा RLS पुन: सत्यापन - एक समर्पित लेख का विषय हैं: ने PostgreSQL CDC को NATSके साथ प्रसारित किया। रीयलटाइम दस्तावेज़ SDK पक्ष पर उपयोग को कवर करता है।

#
स्वीकृत अपवाद

एज फ़ंक्शंस: दो आवश्यकताओं के लिए दो रनटाइम

यह इस फ़ाइल की सबसे महत्वपूर्ण बारीकियां है, और ऑराबेस उत्पाद कोड में शुद्ध रस्ट से एकमात्र वास्तविक विचलन है। प्रत्येक फ़ंक्शन में एक runtime फ़ील्ड होता है जिसका मूल्य "wasm" या "deno"होता है। इनवोकेशन हैंडलर तदनुसार निष्पादन पथ चुनता है - वास्तविक स्निपेट, कोड में ही टिप्पणी की गई है:

functions/dispatch.rsrust
// रनटाइम के अनुसार प्रेषण: WASM (wasmtime) या डेनो (V8 एज-रनटाइम के माध्यम से आइसोलेट्स)
let resp = if func.runtime == "wasm" {
    state.runtime.invoke(&wasm_bytes, &func.code_hash, req).await?
} else {
    // ऑरा-एज-रनटाइम के लिए प्रॉक्सी - V8 आइसोलेट्स (सुपबेस/एज-रनटाइम, एमआईटी)
    proxy_to_edge_runtime(&state.config.edge_runtime_url, …).await?
};

wasm मोड मूल है: aura-functions सीधे Wasmtime (संस्करण 43, सुविधाएँ async और cranelift) पर निर्भर करता है और मॉड्यूल को उसी रस्ट प्रक्रिया में निष्पादित करता है, जिसमें ईंधन की गिनती, युग द्वारा रुकावट और StoreLimitsके माध्यम से मेमोरी बाउंडिंग होती है। deno मोड - स्टूडियो संपादक में डिफ़ॉल्ट रूप से उपयोग किया जाता है, मौजूदा सुपरबेस कोड के साथ लगभग प्रत्यक्ष Deno.serve() संगतता के लिए - निष्पादन को aura-edge-runtimeमें सौंपता है, लगभग 550 लाइनों की एक अलग टाइपस्क्रिप्ट सेवा, स्पष्ट रूप से मॉडलिंग की जाती है - स्रोत फ़ाइल हेडर टिप्पणी स्वयं इसे उद्धृत करती है - सुपरबेस/एज-रनटाइम पर (एमआईटी लाइसेंस), जो प्रत्येक आह्वान को अपने स्वयं के वी8 आइसोलेट में अलग करता है।

ऐसा कहना ईमानदार क्यों है?

नियंत्रण - परिनियोजन, अनुमतियाँ, नौकरियां, क्रॉन, कोटा - aura-functionsमें पूरी तरह से जंग में रहता है। केवल deno मोड में उपयोगकर्ता कोड निष्पादित करना रस्ट बाइनरी से बाहर निकलता है। यह एक रक्षात्मक इंजीनियरिंग समझौता है (V8 आइसोलेट्स वह है जो डेनो मूल रूप से सैंडबॉक्सिंग के इस स्तर के लिए प्रदान करता है), कोई चूक नहीं है जिसे हम चुप रहना पसंद करते हैं। वासटाइम बनाम वासमर तुलना और वेबअसेंबली कोल्ड स्टार्ट विश्लेषण, इस फ़ाइल में जल्द ही आ रहा है, इस विषय पर आगे बढ़ेगा।

दोनों परिनियोजन पथों के कैसे करें दस्तावेज़ के लिए, एज फ़ंक्शंसदेखें। सुपाबेस से डेनो माइग्रेशन प्लेबुक के लिए, एक सुपाबेस प्रोजेक्ट को ऑराबेस में माइग्रेट करेंदेखें, जिसने इस फ़ाइल से पहले ही इस अंतर को प्रलेखित कर दिया है।

#
व्यवहार में

यह एकीकृत हृदय आपके लिए ठोस रूप से क्या बदलता है

यदि आप केवल एसडीके के माध्यम से एपीआई को कॉल करते हैं, तो यह आर्किटेक्चर अदृश्य है - यही लक्ष्य है। यह मुख्य रूप से तीन दर्शकों के लिए मायने रखता है: वे जो उत्पादन डेटा को इसमें स्थानांतरित करने से पहले एक बहु-किरायेदार बैकएंड की परिचालन विश्वसनीयता का मूल्यांकन करते हैं, वे जो रिपॉजिटरी (एमआईटी, एकल मोनोरेपो) में योगदान करने की योजना बनाते हैं, और जो यह समझना चाहते हैं कि ऑराबेस पक्ष पर एक सुरक्षा पैच धीरे-धीरे के बजाय तेजी से क्यों फैलता है।

सीधे तौर पर: एक एकल आईसी (cargo build --workspace, cargo test --workspace, cargo clippy --workspace --all-targets -- -D warnings) उत्पाद की सतह का 90% या अधिक भाग कवर करता है। aura-core पर एक कोड समीक्षा संभावित रूप से एक साथ दस सेवाओं को प्रभावित करती है - बेहतर के लिए (एक सुधार रास्ते में नहीं खोता है) और बदतर के लिए (एक खराब पृथक परिवर्तन उतनी ही तेजी से फैलता है)। यह एक समझौता है, कोई जादुई समाधान नहीं - और यही कारण है कि हम मार्केटिंग सारांश के बजाय वास्तविक वास्तुकला का दस्तावेजीकरण करते हैं।

#
फ़ोल्डर हब

रस्ट इंजीनियरिंग फ़ाइल का शेष भाग

यह स्तंभ पृष्ठ क्लस्टर के तकनीकी विश्लेषणों से लिंक करता है, जैसा कि वे प्रकाशित होते हैं। इस पृष्ठ के प्रकाशन के समय वास्तविक स्थिति - संबंधित लेख ऑनलाइन होते ही लिंक सक्रिय हो जाते हैं।

क्लस्टर ए - रूपरेखा और वास्तुकला

एक्सम बनाम एक्टिक्स-वेब: उत्पादन में रस्ट बैकएंड के लिए कौन सा ढांचा?प्रकाशित

कार्गो वर्कस्पेस आर्किटेक्चर: मल्टी-सर्विस रस्ट बैकएंड की संरचना कैसे करेंप्रकाशित

डुअल-प्लेन गेटवे: रस्ट में डेटा-प्लेन/मैनेजमेंट-प्लेन एपीआई गेटवे डिजाइन करनाप्रकाशित

क्लस्टर बी - पोस्टग्रेज पर स्व-निर्मित एपीआई

PostgREST: संगतता वास्तव में क्या कवर करती है, और कौन से विकल्प मौजूद हैंप्रकाशित

pg_graphql के साथ पोस्टग्रेज पर नेटिव ग्राफक्यूएल एपीआई: हसुरा और पोस्टग्राफाइल वही नहीं करते हैंप्रकाशित

आरएलएस और प्रति परियोजना समर्पित आधार: ऑराबेस से बहु-किरायेदार इन्सुलेशन का विकल्पप्रकाशित

क्लस्टर सी - वास्तविक समय और संदेश

NATS के साथ PostgreSQL CDC वितरित करें: वास्तविक समय आर्किटेक्चरप्रकाशित

क्लस्टर डी - एज फ़ंक्शंस वेबअसेंबली

वासटाइम बनाम वासमर: उत्पादन में एज फ़ंक्शंस के लिए कौन सा वेबअसेंबली रनटाइमजल्द आ रहा है
रस्ट/डब्ल्यूएएसएम बनाम क्लाउडफ्लेयर वर्कर्स और वर्सेल एज में एज फ़ंक्शंसजल्द आ रहा है
कोल्ड स्टार्ट वेबअसेंबली: बेंचमार्क वास्तव में क्या कहते हैं (और हम अभी तक क्या नहीं कह सकते हैं)जल्द आ रहा है

क्लस्टर ई - प्रवासन और विकल्प

अपनी RLS नीतियों को दोबारा लिखे बिना एक सुपाबेस प्रोजेक्ट को ऑराबेस में माइग्रेट करेंप्रकाशित

सॉवरेन सेल्फ-होस्टिंग: ऑराबेस को रस्ट-नेटिव बाएस के विरुद्ध स्थापित करना जल्द ही आ रहा है

#
अक्सर पूछे जाने वाले प्रश्नों

पूछे जाने वाले प्रश्न

क्या ऑराबेस कोड खुला स्रोत है?+
रिपॉजिटरी एक एकल मोनोरेपो है: कार्यक्षेत्र के 18 रस्ट क्रेट, क्लाइंट एसडीके (जावास्क्रिप्ट, रस्ट, पायथन, डार्ट) और नेक्स्ट.जेएस स्टूडियो एक साथ रहते हैं, जो गिटहब पर एमआईटी लाइसेंस के तहत प्रकाशित होते हैं।
क्या ऑराबेस को स्व-होस्ट किया जा सकता है?+
हाँ। स्थानीय k3d बेंच (./start.sh) और आधिकारिक हेल्म चार्ट (तैनाती/हेल्म/ऑराबेस/) आपको संपूर्ण स्टैक तैनात करने की अनुमति देते हैं। यदि आप स्वयं बुनियादी ढांचे का संचालन नहीं करना चाहते हैं तो ऑराबेस क्लाउड प्रबंधित विकल्प बना रहेगा।
क्या जावास्क्रिप्ट एसडीके सुपाबेस के समान सिंटैक्स का उपयोग करता है?+
आवश्यक बातों पर, हाँ: createClient(), जंजीर क्वेरी बिल्डर .from().select().eq(), प्रमाणीकरण प्रवाह और RLS नीतियों का लक्ष्य लगभग प्रत्यक्ष अनुकूलता है - यही वह है जो पूर्ण पुनर्लेखन के बिना सुपाबेस को ऑराबेस माइग्रेशन के लिए संभव बनाता है।
क्या आपको ऑराबेस का उपयोग करने के लिए रस्ट को जानने की आवश्यकता है?+
नहीं, रस्ट बैकएंड भाषा है, न कि वह जिसे आप दैनिक आधार पर लिखते हैं: क्लाइंट एसडीके जावास्क्रिप्ट/टाइपस्क्रिप्ट, रस्ट, पायथन और डार्ट में मौजूद हैं, और एज फ़ंक्शंस डिफ़ॉल्ट रूप से जावास्क्रिप्ट/टाइपस्क्रिप्ट (डेनो रनटाइम) में लिखे गए हैं। यदि आप स्पष्ट रूप से मूल WASM निष्पादन मोड चुनते हैं तो जंग केवल खेल में आती है।
क्या ऑराबेस एज फ़ंक्शंस वास्तव में WebAssembly में चलते हैं?+
यह चुने गए मोड पर निर्भर करता है। डिफ़ॉल्ट मोड (डेनो) आपके जावास्क्रिप्ट/टाइपस्क्रिप्ट कोड को एक समर्पित सेवा के माध्यम से V8 आइसोलेट्स में चलाता है, WASM इंजन में नहीं। एक दूसरा मोड (wasm) मौजूद है और वास्मटाइम के माध्यम से रस्ट ऑरा-फंक्शन सेवा में मूल रूप से चलता है - लेकिन यह डिफ़ॉल्ट पथ नहीं है।

तैनाती के लिए तैयार हैं?

पाँच मिनट में आपका बैकएंड।

किसी क्रेडिट कार्ड की आवश्यकता नहीं · 500 एमबी निःशुल्क · 50,000 एमएयू