Kaupalliset Edge FaaS -palvelut

Sekä Fastlyllä että Cloudflarella on palveluita, joissa voi ajaa WebAssemblyä hyvin kevyesti Function-as-a-Service eli FaaS-palveluna.

Kummassakin palvelussa asiakas antaa suoritettavan WebAssembly-tiedoston heille, ja he asentavat sen kymmeniin reunapalvelimiin ympäri maailmaa. Aina kun asiakkaan pyyntö triggeröi tämän palvelun tarpeen, se käynnistetään millisekunneissa lähimmässä reunapalvelimessa.

Fastly

Fastlyn ratkaisussa luodaan WebAssembly-moduuli Rustilla tai C:llä.

https://www.fastly.com/documentation/reference/compute/

Moduuli käynnistetään yhden HTTP-pyynnön webbiserveriksi. Se voi lukea pyydetyn URL:n argumentteineen.

Tulos palautetaan HTTP-pyynnön esittäjälle HTML-sivuna.

Tämän lisäksi

  • Palvelin voi tehdä HTTP-kyselyjä (mutta ei muuta verkkotoimintaa)
  • Saa vahvan satunnaisuluvun pyytäessään
  • Saa kellonajan

Tämä on kaikki, mitä WebAssembly-ohjelma voi kommunikoida isäntätietokoneen kanssa.

Fastlyn toteutus on tehty Rustilla.

Cloudflare workers

Clouflaren ratkaisussa WebAssembly-moduuli on web-palvelin, joka saa HTTP-pyyntöjä eventteinä, jotka se käsittelee.

CloudFlare käyttää runtimenä V8-JavaScriptiä.

Aikaisemmin pyynnöt oli välitettävä JavaScript ohjelmatynkien kautta, mutta noin kuukausi sitten tehtiin päivitys, joka sallii WebAssemblyn saada pyynnöt suoraan ilman JavaScript-koodia.

https://developers.cloudflare.com/workers/learning/how-workers-works

Palvelupyynnön sisällä voidaan käyttää WebSocketteja kutsujan ja palvelimen tietojenvaihtoon. Tämä on toistaiseksi kokeellinen ominaisuus.

https://developers.cloudflare.com/workers/

Cloudflaren WebAssembly-moduuleilla on käytettävissään Key-Value -tietokanta tietojen pysyvään säilyttämiseen.

Miksi WebAssembly

WebAssemblyn vuoksi tarvitaan vain hyvin kevyt runtime-ympäristö.

Koodi ei pääse missään vaiheessa tekemään suoraan systeemikutsuja tai edes kirjastokutsuja isäntäkoneessa. Tämä takaa täyden turvallisuuden hyökkäyksiin isäntäkoneeseen. Myöskään isäntäkoneen konekielisiä käskyjä ei suoriteta suoraan, joten käskykannan HW-bugejakaan ei päästä hyväksikäyttämään. Esim.

Spectre-haavoittuvuus.

Kevyt runtime tarkoittaa myös, että suoritus alkaa hyvin nopeasti, jopa tuhat kertaa nopeammin kuin kontainer-tyyppisen kuorman käynnistäminen. Yhtäaikaisia suorituksia voi myös olla paljon enemmän.

Päivitys 2024: Fastlyn linkki vaihdettu toimivaksi.