WebAssembly tarayıcıdan çıktı: Sunucu tarafında neler oluyor?
Tarayıcıda hızlı kod çalıştırmak için doğan WebAssembly, artık sunucularda ve uç bilişimde de kullanılıyor. Konteynerlerle farkını, WASI'yi ve hangi işler için mantıklı olduğunu anlatıyorum.
WebAssembly (Wasm), tarayıcıda C, C++ ya da Rust ile yazılmış kodu neredeyse yerel hızda çalıştırmak için ortaya çıktı. Bugün ise asıl heyecan tarayıcının dışında: sunucularda, uç bilişim platformlarında ve eklenti sistemlerinde.
Neden sunucuda?
- Yalıtım: Wasm modülü varsayılan olarak hiçbir şeye erişemez. Dosya, ağ ya da ortam değişkenleri ancak açıkça izin verilirse kullanılabilir.
- Hızlı başlangıç: Bir modül milisaniyeler içinde ayağa kalkar. Soğuk başlangıç sorunu yaşayan sunucusuz işlevler için cazip.
- Taşınabilirlik: Aynı derlenmiş dosya farklı işlemci mimarilerinde ve işletim sistemlerinde çalışır.
- Dil bağımsızlığı: Rust, Go, C, C++ ve giderek artan sayıda dil Wasm'a derlenebiliyor.
WASI: Wasm'ın işletim sistemi arayüzü
Tarayıcıda Wasm, JavaScript üzerinden dış dünyayla konuşur. Sunucuda bunun karşılığı WASI (WebAssembly System Interface): dosya okuma, saat, ağ gibi işlemler için standart bir arayüz. Bileşen modeli (component model) ise farklı dillerde yazılmış modüllerin birbirini güvenle çağırmasını hedefliyor.
Konteynerlerin yerini alacak mı?
Kısa cevap: hayır, ama bazı işlerde tamamlayacak. Konteyner bütün bir işletim sistemi ortamını paketler; Wasm modülü ise yalnızca bir işlevi. Uzun süre çalışan, çok sayıda sistem kütüphanesine ihtiyaç duyan uygulamalar için konteyner hâlâ doğal seçim.
Nerede mantıklı?
- Uç bilişim: İsteğe kullanıcıya en yakın noktada, çok hızlı yanıt veren küçük işlevler.
- Eklenti sistemleri: Kullanıcıların yazdığı kodu ana uygulamayı riske atmadan çalıştırmak.
- Kısa ömürlü işlevler: Resim dönüştürme, doğrulama, veri biçimi çevirme gibi işler.
Sonuç
WebAssembly'nin sunucu tarafı hâlâ olgunlaşıyor; araçlar ve standartlar hızla değişiyor. Ama yalıtım ve hızlı başlangıç ihtiyacı olan işler için şimdiden denemeye değer.