İçeriğe atla

WebAssembly Kullanım Alanları: Tarayıcı, WASI Sunucu ve Edge Compute

Stack'ten bağımsız bir WebAssembly haritası (tarayıcıda performans, sunucuda WASI, edge'de compute) hangi konuşmanın hangi bahisten gittiğini gösterir.

Ayhan Sipahi Ayhan Sipahi

WebAssembly konuşmaları sürekli birbirini ıskalıyor; çünkü tek bir kelime üç çok farklı mimari bahsi örtüyor. Frontend geliştirici “web’i hızlandırır” diye düşünüyor, backend geliştirici “container’ların yerine geçer” diye okuyor, platform geliştirici “edge’i çalıştırır” diye varsayıyor ve üçü de kısmen haklı. Tek bir runtime’ı değerlendirmeden önce problemini bu üçünden birine oturt; hiçbiri mevcut mimarini tarif etmiyorsa Wasm’i şimdilik ertele.

30 Saniyede WASM#

Tek bytecode, üç ayrı bahis: tarayıcıda performans, sunucuda WASI runtime, edge’de compute.

Rust, C, C++, Go, AssemblyScript ve Zig gibi kaynak diller ikili bir talimat formatına derleniyor: .wasm dosyası. Bu bytecode stack tabanlı, bellek güvenli, varsayılan olarak sandbox’lanmış, neredeyse yerel hıza yakın çalışacak şekilde tasarlanmış ve hangi host üstünde çalıştığı umurunda değil.

Rust / C++ / Go / AssemblyScript

Derleme

.wasm bytecode

Tarayıcı (V8 / SpiderMonkey)

Sunucu runtime (Wasmtime / Wasmer)

Edge worker (Cloudflare / Fastly)

Tarayıcı Performansı#

JavaScript CPU yoğun bir iş için yeterince hızlı değil, bu yüzden tarayıcıdaki bahis dar: mevcut C++ veya Rust kod tabanı doğrudan tarayıcı sekmesine taşınıyor ve bu 2017’den beri mümkün.

Figma, 2017’de WebAssembly’i devreye aldı ve editör yüklenme süresini yaklaşık 3× kısalttığını raporladı; C++ render motorunu derleyip tarayıcı içinde çalıştırdılar. Photoshop Web, Adobe ile Chrome ekibinin yıllara yayılan ortak çalışmasının ürünü; Photoshop’un C++ çekirdeği Emscripten üstünden derleniyor ve 2021’de herkese açık web betası yayınlandı.

Wasm’in doğrudan DOM erişimi yok. Wasm kodu bir DOM düğümüne, bir özelliğe veya bir event’e her uzandığında çağrı bedava olmayan bir JavaScript ↔ Wasm köprüsünden geçiyor; “JavaScript yerine Wasm kullanalım” yanlış zihinsel modeli tam da bu yüzden: Wasm uygulamanın içindeki hesaplamayı üstlenirken arayüz JavaScript’te kalıyor. Bu bahis ayrıca üçü içinde en olgunu: dört büyük tarayıcının hepsi destekliyor, platformun kendisi oturmuş durumda, açık tasarım soruları ise artık Emscripten, bellek düzeni ve SharedArrayBuffer üstünden çoklu thread etrafında dönüyor.

Sunucuda WASI#

WASI, tam bir container açmadan izole ve çok dilli iş yüklerinin sunucuda çalışmasını sağlıyor: Docker’a kıyasla daha küçük bir sandbox ve daha hızlı soğuk başlangıç sunuyor, tek fark ekosisteminin container’lardan daha genç olması.

WASI (WebAssembly System Interface), Wasm kodunun altındaki OS’u umursamadan dosyalarla, saatlerle, soket’lerle ve ortam değişkenleriyle konuşmasını sağlayan standart yüzey. İki aktif sürümü var. Preview 1, hâlâ yaygın kullanılan eski POSIX’e yakın API. Preview 2, 25 Ocak 2024’te yayınlandı; Component Model üstüne yeniden inşa edildi ve WASI’yi syscall’lar yerine tiplenmiş arayüzler kümesi olarak yeniden düşünüyor. Preview 3 (WASI 0.3) Wasmtime üstünde çoktan release-candidate aşamasında; async desteği ve yerel thread’ler kapsamda, 1.0 kesimi 2026 sonu ile 2027 başı arasında bekleniyor.

Wasmtime, Bytecode Alliance tarafından yürütülen ve Cranelift kod üreteci üstünde çalışan referans runtime; Wasmer ise kendi paketleme ve dağıtım modelini taşıyan alternatif bir seçenek. Bir katman yukarıda, wasmCloud Wasm bileşenleri ve NATS mesajlaşması üstüne kurulu bir platform. Bu ikilinin bileşen-taşınabilirliği tezine daha derin bir bakış için wasmCloud + NATS: bir event-bus taşınabilirlik bahsi yazısına bakabilirsin.

Component Model kendisi hâlâ stabilize oluyor: Preview 2 stabil kilometre taşı, Preview 3 ise henüz release-candidate aşamasında. Solomon Hykes’ın 2019’da, WASM ile WASI 2008’de var olsaydı Docker’a ihtiyaç kalmayacağı yönündeki yorumu güzel bir uzun vadeli çerçeve ama 2026 için hâlâ bir vizyon ifadesi. Kütüphane kapsamı, dil desteği ve araç zinciri hâlâ runtime’a göre değişiyor.

Edge Compute#

Edge’de kısıt coğrafya: kullanıcılar dağınık ve her isteğe özel kod, container soğuk-başlangıç maliyetini ödemeden onlara yakın çalışmalı. Wasm’in soğuk başlangıcı milisaniye mertebesinde kalıyor (container’larda aynı süre saniyelerle ölçülüyor) ve sandbox’ı istek başına ucuza ayağa kalkıyor.

Cloudflare Workers, V8 izolatlarını Wasm modülleriyle resmi workers-rs crate’i üstünden eşleştirirken, Fastly Compute V8 katmanını tamamen atlayıp saf Wasm tabanlı bir runtime sunuyor; bu da farklı bir izolasyon hikâyesi ve farklı bir performans profili anlamına geliyor. Shopify Functions işi farklı bir açıdan ele alıyor: satıcılar Rust, JavaScript veya AssemblyScript’ten derledikleri Wasm modüllerini Shopify’ın checkout ve indirim akışlarında inline çalıştırıyor; bu da onu satıcılara açık bir ticaret mantığı platformu haline getiriyor.

Her edge platformu kendi KV deposunu, kuyruğunu, binding ABI’sını ve runtime şeklini sunuyor; bu yüzden bytecode taşınabilir ama host binding’leri değil. Cloudflare Workers için derlenmiş bir Wasm modülü Fastly Compute veya Shopify Functions’a olduğu gibi taşınmıyor. Binding’lerin kilitlenmeyi nereye sakladığı, wasmCloud + NATS taşınabilirlik yazısının derinlemesine işlediği tam da bu gerilim. CPU-yoğun bir modülü V8-artı-Wasm edge’ine göndermenin pratikte nasıl göründüğüne (ve üç sert limitin nerede ısıracağına) uygulamalı bir bakış için: Cloudflare Workers’a WASM Görsel Yeniden-Boyutlama Modülü Yüklemek.

Hangi İş İçin Hangi Eksen#

Üç bahis isimlendirildikten sonra karar kısa bir ağaca dönüşüyor.

Evet

Hayir

Evet

Hayir

Evet

Hayir

Tarayıcıda CPU yoğun iş? (grafik, CAD, ses, oyun)

Stateless, izole, çoklu dilli iş yükü? (plugin, UDF, sandboxed compute)

Coğrafi düşük gecikme + istek başına iş?

Bahis 1: Tarayıcıda Performans

Bahis 2: WASI Runtime

Bahis 3: Edge Compute

Hiçbiri (mevcut yapını koru)

Kapanış#

Tarayıcı zaten günlük yüzeyindeyse ve JavaScript motorunun yutamadığı CPU yoğun bir ağrın varsa Bahis 1 ile başla. Sunucu ve edge bahislerine ise WASI Preview 3 release-candidate aşamasından stabil sürüme geçip runtime ekosistemi kalınlaştığında tekrar bakmaya değer.

Kaynaklar#

İlgili yazılar