Ancak Aurabase'in varsayılan modu, Aurabase'in Rust çekirdeği'de belgelendiği gibi Deno olarak kalır (V8 İzolatları da). "Rust'ta Edge İşlevleri" platforma bağlı olarak üç farklı gerçekliği kapsar: Cloudflare tarafında bir topluluk SDK'sı, Vercel tarafında resmi bir rotanın olmaması, Aurabase tarafında kendi CLI'sine sahip yerel bir yürütme modu. Bu karşılaştırma, doğrulananlar ile platform hedefi olarak kalanları karıştırmadan üç mimarinin ayrıntılarını vermektedir.
Temeller
- Aurabase iki Edge Functions çalışma zamanı sunar:
deno(V8 İzolatları, özel hizmet, varsayılan mod) vewasm(Rust derlendi, Wasmtime aracılığıyla yerel olarak çalıştırıldı). - Cloudflare Workers, V8 izolatları üzerinde çalışır ve özellikle
workers-rstopluluk SDK'sı aracılığıyla ek olarak WebAssembly'ı da çalıştırabilir. Aurabase'inwasmmodu gibi özel bir yerel Rust çalışma zamanı değil. - Vercel Edge Functions, V8 izolatlarındaki Node.js API'sinin bir alt kümesi olan Edge Runtime'ı kullanır: işlevin kendisini Rust'a yazacak resmi bir SDK veya CLI yoktur.
- Aurabase'in
wasmmodu, her yürütmeyi bir Wasmtime yakıt CPU bütçesi, ayrılmış bir bellek sınırı ve çağ başına bir zaman aşımı ile yalıtır, ancak şu anda konuk modüle giden herhangi bir ağ erişimini açığa çıkarmaz. - Aynı amaç için üç farklı mimari: Tam bir kapsayıcı maliyeti olmadan hızlı bir şekilde başlayın ve her yürütmeyi izole edin.
V8 izolatları ve WASM modülleri: iki sanal alan mekaniği
Bir V8 izolasyonu, aynı V8 motoru içindeki hafif bir JavaScript yürütme bağlamıdır: yeni sistem işlemi yok, başlatılacak yeni çekirdek yok. Bu, Cloudflare'in İşçiler için ilk kez halka açıkladığı ve Vercel'in Edge Runtime için yeniden kullandığı mekanizmadır. Amaç her iki tarafta da aynı: her istek için konteyner veya VM maliyetinden kaçınmak.
WebAssembly modülü aynı ihtiyacı farklı bir mekanizma aracılığıyla karşılar. WASM bayt kodu, spesifikasyonun kendisi tarafından tanımlanan sınırlı bir doğrusal bellekte çalışır. Konuk modül, ikili dosyayı üreten kaynak dilden (Rust, C, Go...) bağımsız olarak bu alanın dışına adres veremez. Aşağıda ayrıntıları verilen, Wasmtime'ın Aurabase'in wasm modunda uyguladığı bu modeldir. İki mekanik arasındaki başlangıç ölçümleri için WebAssembly soğuk başlatma kıyaslamalarındaki dosyamıza bakın.
Aurabase wasm modunun üretimde çalıştırdığı şey
Her Aurabase işlevi, "wasm" veya "deno"değerinde bir runtime alanı taşır. Çağırma motoru yürütme yolunu buna göre seçer:
Korumalı alan, üç Wasmtime mekanizmasının birleşimine dayanır. "Yakıt" olarak sayılan bir CPU bütçesi: her WASM talimatı onu tüketir. Dönem artışlarında uygulanan bir zaman aşımı: adanmış bir iş parçacığı, yapılandırılmış gecikmeden sonra Wasmtime saatini artırır, bu da mevcut yürütmeyi kesintiye uğratır. StoreLimitsaracılığıyla ayarlanan bir bellek sınırı. Motor başlatıldığında üç terminal yapılandırılır:
Derlenen modül code_hashtarafından önbelleğe alınır: konuşlandırılan aynı ikili dosya her çağrıda yeniden derlenmez. Yine de her çağrı yeni bir Store ve örneğini başlatır. Bir çağrıdan diğerine hiçbir durum sızmaz. Konuk modülüne maruz kalan yüzey alanı kasıtlı olarak minimum düzeyde kalır; toplamda beş ana bilgisayar işlevi bulunur: aura.log, aura.get_input, aura.set_output, aura.get_env ve AssemblyScript uyumluluğu için bir saplama env.abort. Şu anda hiçbir ana bilgisayar işlevi giden ağ çağrılarını açığa çıkarmaz.
wasm modu artık saf hesaplama için uygundur: doğrulama, veri dönüştürme, puanlama, analiz. Üçüncü taraf bir API (ödeme, e-posta, harici hizmet) çağırması gereken bir işlevin yine de denomodundan geçmesi gerekir. Bu, Aurabase için varsayılan moddur ve mevcut Deno kodunu taşımak için önerilen moddur.
Dağıtım tarafında, CLI göndermeden önce sandığınızı yerel olarak derler: aura functions new bir sandığı iskele yapar cdylib, aura functions deploy onu derler ve sonra gönderir.
Cloudflare Workers: Ek olarak WebAssembly ile V8'i izole eder
Cloudflare Çalışanları, Cloudflare'in küresel ağına dağıtılan V8 izolatlarında JavaScript ve TypeScript'i yerel olarak çalıştırır. WebAssembly, platformun başlangıcından bu yana birinci sınıf bir vatandaş olmuştur: .wasm modülü, diğer modüller gibi doğrudan bir Worker'a aktarılabilir.
Bir Worker'ı tamamen Rust'ta yazmak için en çok kullanılan yol, kodu wasm32-unknown-unknown olarak derleyen ve Workers çalışma zamanında çalıştıran topluluk SDK'sı workers-rs'dir. Aurabase'in wasm modunun farkı mevcut yüzey alanıdır. Bu SDK aracılığıyla Rust'ta yazılan bir Worker, tam Workers ortamında çalışır ve bu nedenle fetch veya diğer platform bağlantılarını çağırabilir. Aurabase'in wasm modu, kasıtlı olarak küçültülmüş bir ana bilgisayar yüzeyinden başlar (önceki bölüm).
Vercel Edge İşlevleri: Node.js alt kümesidir, resmi Rust yolu yoktur
Vercel'in Edge Runtime'ı ayrıca tam Node.js ortamı yerine standart Web API'lerinin bir alt kümesiyle (fetch, Request/Response, crypto.subtle…) V8 izolatlarında kod çalıştırır. Yerel Düğüm modüllerinin ve rastgele derleme araç zincirlerinin burada yeri yoktur.
WebAssembly nesnesi bu alt kümenin bir parçasıdır: hiçbir şey bir .wasm ikili dosyasını yüklemenizi ve bunu bir JavaScript veya TypeScript işlevinden elle başlatmanızı engellemez. Ancak bilgimize göre Vercel, Cloudflare tarafındaki workers-rs veya Aurabase tarafındaki aura functions deploy'den farklı olarak Rust'ta doğrudan bir Edge İşlevi yazmak için herhangi bir resmi SDK veya CLI yayınlamamaktadır. Yol mümkün olmaya devam ediyor, ancak özel araçlar olmadan tamamen manuel.
Korumalı alan: WASM doğrusal belleğine karşı V8 yalıtımı
Bir V8 izolatı, aynı motor işlemi içinde, özel bir yığın tarafından yürütülen kodu ve kendi bağlamını ayırır. Cloudflare ve Vercel'de saniyede milyonlarca istek ölçeğinde kanıtlanmış bir mekanizmadır, ancak tek bir JavaScript motorunda bir yazılım izolasyon mekanizması olmaya devam etmektedir.
WASM modeli farklı şekilde yalıtır: her örnek kendi doğrusal belleğine sahiptir; bu belleğin dışında, onu çalıştıran motordan bağımsız olarak ikili formatın kendisinin oluşturulması nedeniyle hiçbir erişimin mümkün olmadığı bitişik bir arabellek vardır. Aurabase çalışma zamanında, konuk modül tarafından sağlanan bir işaretçiyi (aura.log, aura.get_env…) yöneten her ana bilgisayar işlevi, herhangi bir bellek erişiminden önce sınırları açıkça yeniden doğrular. Bu, kötü niyetli veya hatalı bir modüle karşı derinlemesine ek bir savunmadır.
Üç mimari yan yana
| Aurabase (wasm) | Cloudflare Çalışanları | Vercel Kenar İşlevleri | |
|---|---|---|---|
| Yürütme modeli | Yerel WASM modülü, Wasmtime | V8 + WASM'yi isteğe bağlı bir modül olarak izole edin | V8, Node.js alt kümesini izole edin |
| Ön planda pas | Evet, özel mod + CLI | Topluluk SDK'sı aracılığıyla (işçiler-rs) | Hayır, resmi bir rota yok |
| Modülden çıkan ağ erişimi | Hayır, kodda kontrol edildi (ağ ana bilgisayar işlevi yok) | Evet, tam İşçi ortamı aracılığıyla | Evet, standart getirme API'si |
| CPU bütçesi | Yakıt Wasmtime, yapılandırılabilir | İstek başına CPU zaman sınırı (Cloudflare belgesi) | Çağrı başına süre sınırı (belge Vercel) |
| Özel Rust dağıtımı | aura fonksiyonları dağıtımı (yerel kargo yapısı) | asistan + işçiler-rs | Resmi eşdeğer araç yok |
Aurabase çalışma zamanı spesifikasyonları. Her platformun belgelenmiş genel mimarisinden açıklanan Cloudflare ve Vercel sütunları (yapı hedefi olarak V8, WebAssembly'yi izole eder).
İşlevinize göre hangi çalışma zamanını seçmelisiniz
Ağ çağrıları olmadan saf hesaplama: şema doğrulama, veri dönüştürme, puanlama, hafif görüntü oluşturma. Aurabase'in wasm modu, sıkı bir bellek sanal alanı, açık bir CPU bütçesi ve harici bir hizmete bağımlılık olmaksızın doğrudan uygundur.
Üçüncü taraf API'sini çağıran işlev (ödeme, e-posta, giden web kancası). Aurabase'in deno modu, klasik Cloudflare Worker veya Vercel Edge Function'ın yerel olarak fetch'e dayanması gibi, bugün de varsayılan seçenek olmaya devam ediyor.
Ekibi zaten Cloudflare ekosistemi'ye (KV, Dayanıklı Nesneler, R2) yatırım yaptı. İşçilerde kalmak mantıklıdır; workers-rs, platformları değiştirmeden Rust'u kademeli olarak tanıtmanıza olanak tanır.
Özel bir CLI'ye ve arka ucun geri kalanıyla aynı dile sahip, uçtan uca yönetilen yerel bir Rust çalışma zamanı gerekir. Bu, WebAssembly motorunun seçimine ilişkin Wasmtime ve Wasmer karşılaştırmamızdabelgelediği açıdır.