Perché Wasm è il futuro del cloud computing
Wasm potrebbe essere la tecnologia emergente più importante di cui non avete mai sentito parlare. Abbreviazione di WebAssembly, Wasm è stato sviluppato per il web, ma ora le organizzazioni stanno iniziando a eseguirlo lato server e alcuni pensano addirittura che sostituirà la tecnologia dei container e l’onnipresente JavaScript. Che ci creditate o meno, questo standard sta chiaramente avendo un impatto sul cloud computing. Ma esattamente perché… e come?
Wasm è multipiattaforma
Gli sviluppatori usano diversi tipi di linguaggi di programmazione per scrivere software e far interagire questi linguaggi tra loro è difficile. WebAssembly fornisce un framework in cui è possibile scrivere in qualsiasi linguaggio si desideri. Quindi produce un formato macchina simulato comune.
Questo formato consente ai componenti scritti in vari linguaggi, come Rust, C/C++ e Go, di comunicare tra loro. Wasm offre anche la possibilità per i sistemi lato server come i database di incorporare componenti da linguaggi diversi senza richiedere di sapere o preoccuparsi di come è stato prodotto quel modulo.
Pensate a Wasm come a un formato di plugin universale. Supponiamo che vogliate aumentare le capacità del vostro sistema con un componente sviluppato da una terza parte. Wasm consente di portare il nuovo componente nel sistema senza i rischi che in genere derivano dall’integrazione di componenti aggiuntivi. Ad esempio, un componente esterno potrebbe arrestare in modo anomalo il sistema o funzionare in modo imprevisto. Wasm mitiga questi problemi creando un framework estremamente sicuro per l’interazione di sistemi e componenti diversi.
Wasm è una buona soluzione per il cloud perché è virtualizzato e può funzionare in qualsiasi ambiente che supporti il runtime Wasm. Inoltre, i sistemi cloud sono in genere composti da molti servizi messi insieme e collegati in modi diversi. Questo può diventare complicato, ma più è possibile semplificare l’ambiente cloud, più è facile per i vari aspetti dei sistemi cloud lavorare correttamente insieme.
Wasm è sicuro
Nella maggior parte dei runtime dei linguaggi di programmazione, le funzioni hanno indirizzi, che sono punti eseguibili nella memoria. Se si guarda solo alla memoria come a un gruppo di byte, una funzione potrebbe essere indistinguibile dal resto della memoria. Questo permette di trovare la funzione e iniettare codice in essa, o di chiamare una funzione in modo privilegiato in modo che faccia qualcosa che non dovrebbe fare. Il design di Wasm elimina questi problemi di sicurezza.
Wasm rappresenta infatti le funzioni in modo non sfruttabile. Esegue inoltre il codice in una sandbox, cosa che riduce i problemi di sicurezza comuni associati all’esecuzione di codice non attendibile e poiché incapsula la memoria del programma in un’area sicura, nulla può uscire da essa e accedere ad altri luoghi che potrebbero influire sull’host che esegue il programma o compromettere la sicurezza. Con il modello di sicurezza basato sulle funzionalità di Wasm, gli host hanno inoltre il controllo completo sui tipi di operazioni privilegiate che il programma Wasm può eseguire. Ad esempio, gli host devono concedere esplicitamente l’accesso alle directory se l’accesso ai file è un requisito.
Wasm è veloce
Chiaramente, non parliamo della prima tecnologia utilizzata per riunire più cose in modo più sicuro e semplificato. Tuttavia, è molto più veloce di alcune di queste altre tecnologie. I compilatori possono generare programmi Wasm sfruttando il back-end di una LLVM (Low Level Virtual Machine), ovvero una macchina estratta che molti linguaggi già compilano. Come risultato di questo approccio, e grazie a molti anni di sforzi della comunità intorno al progetto LLVM, i programmi WebAssembly possono essere compilati in codice macchina altamente ottimizzato.
L’azienda SingleStore, ad esempio, ha creato il Wasm Space Program, un universo virtuale in tempo reale all’interno di un database per dimostrare quanto sia veloce e leggero Wasm. In questa simulazione, le astronavi utilizzano diverse strategie per combattere altri veicoli spaziali in un vasto “universo” in tempo reale. Ciò comporta una grande quantità di dati, con oltre un milione di navi nel sistema e quasi tre milioni di aggiornamenti del database al secondo.
Tradizionalmente, l’integrazione di tali dati e l’assemblaggio su un livello intermedio richiederebbero il recupero di molti dati nel livello intermedio. Ciò potrebbe introdurre un’enorme quantità di ritardo e richiedere un caching complesso per ottenere una risposta in tempo reale. Piuttosto che adottare questo approccio, la strategia di ogni astronave è stata scritta in Wasm e caricata nel database come UDF. Ogni secondo, ciascuna delle funzioni strategiche delle astronavi viene invocata per decidere la sua prossima mossa.
Non c’è nulla sul front-end (un programma JavaScript in esecuzione nel browser) che comprenda queste strategie o qualcosa sullo stato dell’universo. Il suo compito è semplicemente quello di inviare query SQL direttamente al database e presentare graficamente le informazioni restituite. Il database mantiene tutte le informazioni sullo stato e, poiché Wasm ha permesso al calcolo di essere proprio accanto ai dati, è molto più veloce. Non è stato nemmeno necessario un livello intermedio. Ma Wasm, ovviamente, non è tutto divertimento e giochi. Potete infatti usarlo anche per affrontare innumerevoli altre applicazioni e casi d’uso come l’analisi del sentiment.
Wasm migliora continuamente
Già oggi Wasm è molto capace, ma con le nuove tecnologie e gli standard che sono in arrivo permetterà di fare ancora di più. Ad esempio, il W3C WebAssembly Community Group, con l’aiuto di membri di organizzazioni come la Bytecode Alliance, sta attualmente lavorando alla standardizzazione della WebAssembly System Interface (WASI). WASI fornirà un set standard di API e servizi che possono essere utilizzati quando i moduli Wasm sono in esecuzione sul server. Molte proposte standard sono ancora in corso, come la garbage collection, l’I/O di rete e il threading, quindi non è sempre possibile mappare le cose che si stanno facendo in altri linguaggi di programmazione su Wasm. WASI mira comunque a fornire uno standard completo che contribuirà a raggiungere questo obiettivo.
Wasm, così com’è al momento, non può nemmeno comunicare con altri moduli Wasm. Ma la community, con il supporto dei membri dell’industria informatica, sta lavorando alla creazione di qualcosa chiamato modello dei componenti, che mira a creare un’infrastruttura di collegamento dinamica attorno ai moduli Wasm, definendo come i componenti si avviano e comunicano tra loro (qualcosa di simile al modello di processo di un sistema operativo tradizionale).
Wasm è il futuro
Wasm, anche se più leggero, potrebbe non sostituire i container in tempi brevi, ma in futuro potrebbe diventare parte di tantissimi software. Sia sul server che sull’edge, Wasm consente infatti di creare in modo sicuro, efficiente e con maggiore flessibilità una logica personalizzata che viene eseguita molto più vicino ai dati rispetto a prima.