हालाँकि, ऑराबेस का डिफ़ॉल्ट मोड डेनो (V8 आइसोलेट्स भी) बना हुआ है, जैसा कि ऑराबेस के रस्ट कोरमें प्रलेखित है। "एज फ़ंक्शंस इन रस्ट" प्लेटफ़ॉर्म के आधार पर तीन अलग-अलग वास्तविकताओं को शामिल करता है: क्लाउडफ़ेयर पक्ष पर एक समुदाय एसडीके, वर्सेल पक्ष पर कोई आधिकारिक मार्ग नहीं, ऑराबेस पक्ष पर अपने स्वयं के सीएलआई के साथ एक मूल निष्पादन मोड। यह तुलना तीन आर्किटेक्चर का विवरण देती है, बिना यह मिलाए कि क्या सत्यापित है और प्लेटफ़ॉर्म का उद्देश्य क्या है।
अनिवार्य है
- ऑराबेस दो एज फ़ंक्शंस रनटाइम प्रदान करता है:
deno(V8 आइसोलेट्स, समर्पित सेवा, डिफ़ॉल्ट मोड) औरwasm(रस्ट संकलित, वास्मटाइम के माध्यम से मूल रूप से चलाएं)। - क्लाउडफ्लेयर वर्कर्स V8 आइसोलेट्स पर चलता है और इसके अलावा WebAssembly भी चला सकता है, विशेष रूप से
workers-rsसमुदाय SDK के माध्यम से। यह ऑराबेस केwasmमोड की तरह एक समर्पित देशी रस्ट रनटाइम नहीं है। - वर्सेल एज फ़ंक्शंस एज रनटाइम पर निर्भर करता है, जो आइसोलेट्स V8 पर Node.js API का एक सबसेट है: फ़ंक्शन को रस्ट में लिखने के लिए कोई आधिकारिक एसडीके या सीएलआई नहीं है।
- ऑराबेस का
wasmमोड प्रत्येक निष्पादन को वास्मटाइम ईंधन सीपीयू बजट, एक समर्पित मेमोरी सीमा और प्रति युग टाइमआउट के साथ अलग करता है, लेकिन वर्तमान में अतिथि मॉड्यूल के लिए किसी भी आउटगोइंग नेटवर्क एक्सेस को उजागर नहीं करता है। - एक ही लक्ष्य के लिए तीन अलग-अलग आर्किटेक्चर: एक पूर्ण कंटेनर की लागत के बिना, जल्दी से शुरू करें और प्रत्येक निष्पादन को अलग करें।
V8 आइसोलेट्स और WASM मॉड्यूल: दो सैंडबॉक्सिंग मैकेनिक्स
V8 आइसोलेट उसी V8 इंजन के अंदर एक हल्का जावास्क्रिप्ट निष्पादन संदर्भ है: कोई नई सिस्टम प्रक्रिया नहीं, शुरू करने के लिए कोई नया कर्नेल नहीं। यह वह तंत्र है जिसे क्लाउडफ़ेयर ने सबसे पहले वर्कर्स के लिए सार्वजनिक किया था, और जिसे वर्सेल अपने एज रनटाइम के लिए पुन: उपयोग करता है। उद्देश्य दोनों तरफ समान है: प्रत्येक अनुरोध के लिए कंटेनर या वीएम की लागत से बचना।
A WebAssembly module meets the same need through a different mechanism. The WASM bytecode runs in a bounded linear memory, defined by the specification itself. The guest module cannot address outside this area, regardless of the source language (Rust, C, Go…) that produced the binary. It is this model that Wasmtime applies in the wasm mode of Aurabase, detailed below. For startup measurements between the two mechanics, see our file on WebAssembly cold start benchmarks.
Aurabase wasm mode उत्पादन में क्या चलता है
प्रत्येक ऑराबेस फ़ंक्शन में एक runtime फ़ील्ड होता है जिसका मूल्य "wasm" या "deno"होता है। इनवोकेशन इंजन तदनुसार निष्पादन पथ चुनता है:
सैंडबॉक्स संयुक्त रूप से तीन वासमटाइम तंत्रों पर निर्भर करता है। सीपीयू बजट को "ईंधन" में गिना जाता है: प्रत्येक WASM निर्देश इसका उपभोग करता है। युग वृद्धि में एक टाइमआउट लागू किया जाता है: एक समर्पित थ्रेड कॉन्फ़िगर किए गए विलंब के बाद वासटाइम घड़ी को बढ़ाता है, जो वर्तमान निष्पादन को बाधित करता है। StoreLimitsके माध्यम से एक मेमोरी सीमा निर्धारित की गई। इंजन चालू होने पर तीन टर्मिनल कॉन्फ़िगर किए जाते हैं:
संकलित मॉड्यूल को code_hashद्वारा कैश किया गया है: प्रत्येक कॉल पर समान तैनात बाइनरी को पुन: संकलित नहीं किया जाता है। फिर भी प्रत्येक आह्वान एक नया Store और उदाहरण प्रस्तुत करता है। कोई भी स्थिति एक कॉल से दूसरे कॉल में लीक नहीं होती. अतिथि मॉड्यूल के संपर्क में आने वाला सतह क्षेत्र जानबूझकर न्यूनतम रहता है, कुल मिलाकर पांच होस्ट फ़ंक्शन: aura.log, aura.get_input, aura.set_output, aura.get_env और असेंबलीस्क्रिप्ट संगतता के लिए एक स्टब env.abort। इस समय कोई भी होस्ट फ़ंक्शन आउटगोइंग नेटवर्क कॉल को उजागर नहीं करता है।
wasm मोड अब शुद्ध गणना के लिए उपयुक्त है: सत्यापन, डेटा परिवर्तन, स्कोरिंग, विश्लेषण। एक फ़ंक्शन जिसे तृतीय-पक्ष API (भुगतान, ईमेल, बाहरी सेवा) को कॉल करना होगा, उसे अभी भी denoमोड से गुजरना होगा। यह ऑराबेस के लिए डिफ़ॉल्ट मोड है, और मौजूदा डेनो कोड को माइग्रेट करने के लिए अनुशंसित मोड है।
परिनियोजन पक्ष पर, सीएलआई आपके टोकरे को भेजने से पहले स्थानीय रूप से संकलित करता है: aura functions new एक टोकरा तैयार करता है cdylib, aura functions deploy इसे संकलित करता है और फिर भेजता है।
क्लाउडफ्लेयर वर्कर्स: WebAssembly के साथ V8 को अलग करता है
क्लाउडफ़ेयर वर्कर्स मूल रूप से क्लाउडफ़ेयर के वैश्विक नेटवर्क पर वितरित V8 आइसोलेट्स में जावास्क्रिप्ट और टाइपस्क्रिप्ट चलाते हैं। प्लेटफ़ॉर्म की शुरुआत से ही WebAssembly एक प्रथम श्रेणी का नागरिक रहा है: .wasm मॉड्यूल को किसी अन्य मॉड्यूल की तरह सीधे वर्कर में आयात किया जा सकता है।
वर्कर को पूरी तरह से रस्ट में लिखने के लिए, सबसे अधिक उपयोग किया जाने वाला मार्ग समुदाय SDK workers-rsहै, जो कोड को wasm32-unknown-unknown में संकलित करता है और इसे वर्कर्स रनटाइम में निष्पादित करता है। ऑराबेस के wasm मोड के साथ अंतर उपलब्ध सतह क्षेत्र है। इस एसडीके के माध्यम से रस्ट में लिखा गया एक वर्कर पूर्ण वर्कर्स वातावरण में चलता है, और इसलिए fetch या अन्य प्लेटफ़ॉर्म बाइंडिंग को कॉल कर सकता है। ऑराबेस का wasm मोड जानबूझकर कम की गई होस्ट सतह (पिछले अनुभाग) से शुरू होता है।
वर्सेल एज फ़ंक्शंस: एक Node.js सबसेट, कोई आधिकारिक रस्ट पथ नहीं
वर्सेल का एज रनटाइम पूर्ण Node.js वातावरण के बजाय मानक वेब एपीआई (fetch, Request/Response, crypto.subtle…) के सबसेट के साथ, V8 आइसोलेट्स में भी कोड चलाता है। मूल नोड मॉड्यूल और मनमाने ढंग से संकलन टूलचेन का वहां कोई स्थान नहीं है।
WebAssembly ऑब्जेक्ट इस सबसेट का हिस्सा है: कुछ भी आपको .wasm बाइनरी लोड करने और इसे जावास्क्रिप्ट या टाइपस्क्रिप्ट फ़ंक्शन से हाथ से इंस्टेंट करने से नहीं रोकता है। लेकिन हमारी जानकारी के अनुसार, क्लाउडफ्लेयर पक्ष पर workers-rs या ऑराबेस पक्ष पर aura functions deploy के विपरीत, वर्सेल रस्ट में सीधे एज फ़ंक्शन लिखने के लिए कोई आधिकारिक एसडीके या सीएलआई प्रकाशित नहीं करता है। पथ संभव बना हुआ है, लेकिन पूरी तरह से मैन्युअल, समर्पित उपकरणों के बिना।
सैंडबॉक्स: WASM लीनियर मेमोरी बनाम V8 आइसोलेशन
एक V8 आइसोलेट एक ही इंजन प्रक्रिया के भीतर एक समर्पित ढेर द्वारा निष्पादित कोड और उसके स्वयं के संदर्भ को अलग करता है। यह क्लाउडफ्लेयर और वर्सेल में प्रति सेकंड लाखों अनुरोधों के पैमाने पर एक सिद्ध तंत्र है, लेकिन यह एक एकल जावास्क्रिप्ट इंजन के भीतर एक सॉफ्टवेयर अलगाव तंत्र बना हुआ है।
WASM मॉडल अलग-अलग तरीके से अलग होता है: प्रत्येक उदाहरण को अपनी स्वयं की रैखिक मेमोरी मिलती है, एक सन्निहित बफर जिसके बाहर बाइनरी प्रारूप के निर्माण से कोई पहुंच संभव नहीं है, स्वतंत्र रूप से इसे निष्पादित करने वाले इंजन से। ऑराबेस रनटाइम में, प्रत्येक होस्ट फ़ंक्शन जो अतिथि मॉड्यूल (aura.log, aura.get_env…) द्वारा प्रदान किए गए पॉइंटर में हेरफेर करता है, किसी भी मेमोरी एक्सेस से पहले सीमाओं को स्पष्ट रूप से पुनः सत्यापित करता है। यह दुर्भावनापूर्ण या खराब मॉड्यूल के विरुद्ध गहराई में एक अतिरिक्त सुरक्षा है।
तीन वास्तुकलाएं, साथ-साथ
| ऑराबेस (wasm) | क्लाउडफ्लेयर श्रमिक | वर्सेल एज फ़ंक्शंस | |
|---|---|---|---|
| निष्पादन मॉडल | मूल WASM मॉड्यूल, वासटाइम | वैकल्पिक मॉड्यूल के रूप में V8 + WASM को अलग करें | V8, Node.js सबसेट को अलग करें |
| अग्रभूमि में जंग | हाँ, समर्पित मोड + सीएलआई | समुदाय एसडीके (श्रमिक-आरएस) के माध्यम से | नहीं, कोई आधिकारिक मार्ग नहीं |
| मॉड्यूल से बाहर निकलने वाली नेटवर्क पहुंच | नहीं, कोड में चेक किया गया (कोई नेटवर्क होस्ट फ़ंक्शन नहीं) | हाँ, संपूर्ण श्रमिक परिवेश के माध्यम से | हां, मानक फ़ेच एपीआई |
| सीपीयू बजट | ईंधन वास्मटाइम, विन्यास योग्य | प्रति अनुरोध सीपीयू समय सीमा (क्लाउडफ्लेयर दस्तावेज़) | प्रति समन अवधि सीमा (डॉक्टर वर्सेल) |
| समर्पित जंग परिनियोजन | ऑरा फ़ंक्शंस परिनियोजन (कार्गो बिल्ड स्थानीय) | रैंगलर + श्रमिक-रु | कोई आधिकारिक समकक्ष उपकरण नहीं |
ऑराबेस रनटाइम विनिर्देश। प्रत्येक प्लेटफ़ॉर्म के प्रलेखित सार्वजनिक आर्किटेक्चर से वर्णित क्लाउडफ़ेयर और वर्सेल कॉलम (V8, WebAssembly को बिल्ड लक्ष्य के रूप में अलग करता है)।
आपके फ़ंक्शन के अनुसार कौन सा रनटाइम चुनना है
शुद्ध गणना, नेटवर्क कॉल के बिना: स्कीमा सत्यापन, डेटा परिवर्तन, स्कोरिंग, हल्की छवि निर्माण। ऑराबेस का wasm मोड एक सख्त मेमोरी सैंडबॉक्स, एक स्पष्ट सीपीयू बजट और बाहरी सेवा पर निर्भरता के बिना सीधे उपयुक्त है।
फ़ंक्शन जो तृतीय-पक्ष API (भुगतान, ईमेल, आउटगोइंग वेबहुक) को कॉल करता है। ऑराबेस का deno मोड आज भी डिफ़ॉल्ट विकल्प बना हुआ है, उसी तरह जैसे एक क्लासिक क्लाउडफ्लेयर वर्कर या वर्सेल एज फ़ंक्शन मूल रूप से fetch पर निर्भर करता है।
टीम ने पहले ही क्लाउडफ्लेयर इकोसिस्टम (KV, ड्यूरेबल ऑब्जेक्ट्स, R2) में निवेश किया है। वर्कर्स पर बने रहना समझ में आता है; workers-rs आपको प्लेटफ़ॉर्म बदले बिना, धीरे-धीरे रस्ट पेश करने की अनुमति देता है।
को एक देशी रस्ट रनटाइम की आवश्यकता है जो एंड-टू-एंड प्रबंधित हो, एक समर्पित सीएलआई और बाकी बैकएंड के समान भाषा के साथ। यह वह कोण है जो हमारे वासटाइम बनाम वासमर तुलनामें वेबअसेंबली इंजन की पसंद पर दस्तावेज़ करता है।