Ana içeriğe geç
Bulut & Altyapı

AWS Lambda Web Functions üzerinde Freedoom çalıştırıldı

Öne çıkanlar

  • C dilindeki Doom motoru zig cc ile 2,7 MB boyutunda WebAssembly çıktısına dönüştürüldü.
  • Oturumlar arası ortam geçişleri girdi kütüğünün yeniden oynatılmasıyla 120 milisaniyede tamamlandı.
  • Kare iletimi tek bir HTTP yanıtı üzerinden saniyede 17,5 kare ve 500 KB veri hızıyla sağlandı.

AWS Lambda Web Functions mimarisinin durum bilgisi içeren ve uzun süreli iş yüklerindeki sınırlarını test etmek amacıyla 1993 yapımı Doom oyun motoru sunucusuz ortama taşındı. C diliyle yazılan doomgeneric motoru zig cc aracılığıyla 2,7 MB boyutunda WebAssembly modülüne derlendi. Node.js 24 çalışma zamanı üzerinde çalışan Lambda işlevi, doğrudan WASI arayüzünü kullanarak oyun karelerini tarayıcıya ikili veri akışı olarak aktarmayı başardı.

Lambda Web Functions mimarisinde oturum benzerliği bulunmadığından gelen istekler rastgele yürütme ortamlarına dağıtılıyor. Geliştirici, megabaytlarca bellek verisini sürekli kaydetmek yerine Amazon DynamoDB üzerinde deterministik girdi günlüğü tutma yöntemini benimsedi. İstek oyunu çalıştırmayan farklı bir ortama ulaştığında yeni ortam girdi kaydını baştan oynatarak durumu yaklaşık 120 milisaniyede yeniden oluşturdu. Bu aktarım süreci oyun esnasında fark edilir bir kesintiye yol açmadı.

Sunucu tarafında her oyun döngüsü yaklaşık 0,15 milisaniye işlemci süresi tüketirken kareler saniyede 17,5 kare hızında tek bir HTTP yanıtı üzerinden istemciye gönderildi. Bant genişliği optimizasyonu sayesinde veri tüketimi oyuncu başına saniyede 500 kilobayta kadar düşürüldü. Proje mimarisi aynı zamanda girdi kayıtlarını takip ederek oyunların eşzamanlı olarak izleyiciler tarafından gecikmesiz seyredilmesine de olanak tanıdı.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.