面向?yàn)g覽器開發(fā)人員的無服務(wù)器WebAssembly

目標(biāo)是建立一種二進(jìn)制格式,可以在每個(gè)主要的網(wǎng)絡(luò)瀏覽器中執(zhí)行。這種格式的特點(diǎn)使許多不同的語言,從C到Python,都可以在瀏覽器中運(yùn)行。代碼是用支持的語言之一編寫的,編譯成Wasm格式,然后在瀏覽器中執(zhí)行。JavaScript代碼控制Wasm的執(zhí)行,甚至可以通過調(diào)用Wasm庫內(nèi)的函數(shù)與Wasm交互。

本文來自微信公眾號(hào)“開源云中文社區(qū)”。

WebAssembly(通常簡(jiǎn)稱為Wasm)是為web瀏覽器而構(gòu)建的。但一項(xiàng)技術(shù)的發(fā)展往往超出了其創(chuàng)造者的意圖。Wasm就是一個(gè)很好的例子。Wasm在一個(gè)地方很有希望,那就是在云端。這是一個(gè)運(yùn)行無服務(wù)器功能的絕佳平臺(tái)。

在本文中,我們將了解Wasm的設(shè)計(jì)意圖,以及它是如何改進(jìn)瀏覽器的。然后我們將看到Wasm是如何實(shí)現(xiàn)向通用技術(shù)的飛躍的。

最后,我們將看看云中的一個(gè)特定問題——執(zhí)行無服務(wù)器功能,并看看Wasm如何解決這個(gè)問題。

跳過Applets、Flash和Silverlight

2015年,Mozilla向世界推出了WebAssembly。在這篇博客文章中,Luke Wagner這樣描述WebAssembly:

“WebAssembly定義了一種可移植的、節(jié)省大小和加載時(shí)間的格式和執(zhí)行模型,專門設(shè)計(jì)用作web的編譯目標(biāo)。”

目標(biāo)是建立一種二進(jìn)制格式,可以在每個(gè)主要的網(wǎng)絡(luò)瀏覽器中執(zhí)行。這種格式的特點(diǎn)使許多不同的語言,從C到Python,都可以在瀏覽器中運(yùn)行。代碼是用支持的語言之一編寫的,編譯成Wasm格式,然后在瀏覽器中執(zhí)行。JavaScript代碼控制Wasm的執(zhí)行,甚至可以通過調(diào)用Wasm庫內(nèi)的函數(shù)與Wasm交互。

這已經(jīng)不是第一次嘗試這樣的事情了。一些其他語言已經(jīng)添加到瀏覽器中(后來又從瀏覽器中刪除)。Java Applets是第一個(gè)。VBScript在微軟瀏覽器中有過短暫的壽命。Silverlight和Adobe Flash也來了又走。但這一次,Mozilla的人做了一些不同的事情:

——他們沒有支持一種語言,而是定義了一種現(xiàn)有語言可以編譯的二進(jìn)制格式。

——Mozilla沒有單干,而是與谷歌、微軟、蘋果和其他公司聯(lián)合起來。他們承諾在W3C的贊助下開展這項(xiàng)工作。

——Wasm沒有像Flash、Silverlight和Java那樣專注于增強(qiáng)用戶界面,而是專注于庫的使用和共享代碼。

——Wasm團(tuán)隊(duì)試圖解決的用例不是小部件和流媒體播放器,而是將代碼從其他地方移植到瀏覽器。例如,考慮一下那個(gè)破舊的C庫,它多年來一直盡職盡責(zé)地做著一些重要的工作,但每個(gè)人都害怕碰它,因?yàn)楹ε缕茐乃?。它能被編譯到Wasm以在瀏覽器中享受新的使用嗎?或者考慮一下需要高效計(jì)算的復(fù)雜問題,比如圖形處理?高性能代碼可能更容易用Rust這樣的語言表達(dá)。Wasm允許開發(fā)人員用開發(fā)人員喜歡的語言編寫代碼,然后在瀏覽器范圍內(nèi)使用。

不斷增長(zhǎng)的用途

縱觀計(jì)算歷史,我們發(fā)明了一些技術(shù)來解決一個(gè)狹隘的問題,但后來才意識(shí)到該工具有更廣泛的應(yīng)用——互聯(lián)網(wǎng)是為美國(guó)國(guó)防部的通信而建立的;網(wǎng)絡(luò)是用來交換物理論文的;Java是用于嵌入式計(jì)算的;JavaScript,現(xiàn)在是世界上最流行的語言,最初是一種在瀏覽器中彈出警報(bào)的“玩具”語言。這些技術(shù)都從利基解決方案躍升為通用工具。

Wasm現(xiàn)在就在那一刻。

它在瀏覽器中取得了成功。但人們正在發(fā)現(xiàn)Wasm的各種其他用途。從編譯器工具鏈到數(shù)據(jù)庫中的用戶定義函數(shù),Wasm在一些值得注意的地方出現(xiàn)了。

——SingleStore將Wasm用于數(shù)據(jù)庫中的用戶定義函數(shù)。

——開發(fā)Zig語言的人最近宣布,他們使用Wasm自托管編譯器,“消滅”了8000行C++代碼。

——Docker宣布支持在Docker Desktop中運(yùn)行Wasm,而微軟現(xiàn)在支持在其AKS Kubernetes集群中運(yùn)行Wasm。

還有一個(gè)用例特別令人興奮。WebAssembly似乎非常適合云計(jì)算。為了理解原因,讓我們從當(dāng)今云的核心技術(shù)之一:無服務(wù)器功能開始。

無服務(wù)器功能v1

無服務(wù)器功能,有時(shí)被稱為功能即服務(wù)(FaaS),旨在提供一種創(chuàng)建小型云服務(wù)的簡(jiǎn)單方法。通過將無服務(wù)器功能與服務(wù)器進(jìn)行對(duì)比,最容易理解無服務(wù)器功能。web服務(wù)器軟件在套接字上偵聽HTTP請(qǐng)求,解析每個(gè)請(qǐng)求,然后處理這些請(qǐng)求。在web服務(wù)器的進(jìn)程生存期內(nèi),它可能會(huì)處理數(shù)十萬個(gè)單獨(dú)的HTTP請(qǐng)求。典型的HTTP服務(wù)器還必須管理SSL連接、系統(tǒng)進(jìn)程、線程池和并發(fā),以及各種其他較低級(jí)別的任務(wù),所有這些都是為了響應(yīng)HTTP請(qǐng)求。

無服務(wù)器功能旨在盡可能多地去除“服務(wù)器性”。相反,編寫無服務(wù)器功能的開發(fā)人員應(yīng)該能夠?qū)W⒂谝患拢喉憫?yīng)HTTP請(qǐng)求。沒有網(wǎng)絡(luò),沒有SSL配置,也沒有請(qǐng)求線程池管理——所有這些都由平臺(tái)處理。無服務(wù)器功能啟動(dòng),回答一個(gè)請(qǐng)求,然后關(guān)閉。

這種緊湊的設(shè)計(jì)不僅減少了我們必須編寫的代碼量,而且還降低了運(yùn)行無服務(wù)器功能的復(fù)雜性。我們不必讓HTTP或SSL庫保持最新,因?yàn)槲覀儾恢苯庸芾磉@些東西。平臺(tái)確實(shí)如此。從錯(cuò)誤處理到升級(jí),一切都應(yīng)該更容易,事實(shí)上也更容易。

鑒于這種對(duì)簡(jiǎn)單性的不懈關(guān)注,難怪420萬開發(fā)人員表示他們至少編寫了一個(gè)無服務(wù)器功能。亞馬遜報(bào)告稱,他們每月執(zhí)行10萬億無服務(wù)器功能。

盡管編程范式很有吸引力,但無服務(wù)器功能的早期迭代也有幾個(gè)缺點(diǎn)。它們起步很慢。打包無服務(wù)器功能并部署非常繁瑣。調(diào)試和故障排除很困難。然而,這些問題背后的原因既容易理解,又令人驚訝。

這些無服務(wù)器功能的絕妙新想法是在錯(cuò)誤的技術(shù)堆棧上運(yùn)行的——笨重的虛擬機(jī)。每種語言的運(yùn)行時(shí)和包管理器。為另一類計(jì)算構(gòu)建的云基礎(chǔ)設(shè)施正被重新用于一種事后看來不適合的技術(shù)。

事實(shí)證明,我們需要將無服務(wù)器從好提升到很棒的技術(shù)就存在于瀏覽器中——把Wasm植入云端。

Wasm為無服務(wù)器所做的

如果我們?cè)噲D改善無服務(wù)器功能的狀態(tài),那么有一些高優(yōu)先級(jí)的部分需要改進(jìn)。我們需要無服務(wù)器環(huán)境非常快速、超級(jí)安全,并且我們希望它盡可能多地隱藏“服務(wù)器”的詳細(xì)信息。也就是說,當(dāng)我們必須開始要求用戶選擇操作系統(tǒng)或CPU類型時(shí),我們就迫使用戶做出服務(wù)器決策,而不是無服務(wù)器決策。當(dāng)涉及到部署無服務(wù)器功能時(shí),定義良好的包格式的較小二進(jìn)制文件使我們更容易進(jìn)行發(fā)布。

正是在這里,Wasm的傳統(tǒng)使其成為無服務(wù)器功能的完美選擇。當(dāng)我們談?wù)揥asm是“為瀏覽器構(gòu)建的”時(shí),我們實(shí)際上是在談?wù)撘恍┦筗asm非常適合瀏覽器模型的關(guān)鍵功能:

——啟動(dòng)時(shí)間快。沒有人愿意等待頁面加載。

——跨架構(gòu)、跨操作系統(tǒng)。“需要Internet Explorer才能查看此頁面”的日子已經(jīng)一去不復(fù)返了。

——壓縮二進(jìn)制文件。當(dāng)在互聯(lián)網(wǎng)上移動(dòng)代碼時(shí),我們不想發(fā)送大文件。

——安全沙盒。瀏覽器每天運(yùn)行不受信任的代碼。我們依靠瀏覽器來保護(hù)我們免受漏洞和黑客的攻擊。

這四個(gè)特性恰好是無服務(wù)器功能平臺(tái)所需要的特性:想要零延遲啟動(dòng)時(shí)間;不想知道或關(guān)心功能運(yùn)行的架構(gòu)或操作系統(tǒng)(這就是無服務(wù)器的樂趣,對(duì)吧?不必關(guān)心下面的服務(wù)器?。?;希望二進(jìn)制文件緊湊,這樣就可以快速打包和上傳它們;想知道在多租戶云中運(yùn)行功能是否安全。

在Wasm上運(yùn)行的無服務(wù)器功能平臺(tái)可以很容易地構(gòu)建各種各樣的應(yīng)用程序,包括高響應(yīng)的HTTP應(yīng)用程序,然后高度自信地部署它們。這正是我們?cè)贔ermyon構(gòu)建開源Spin框架時(shí)考慮的用例。

結(jié)論

許多技術(shù)都是從一個(gè)利基市場(chǎng)開始的,后來發(fā)展成為通用工具。隨著我們發(fā)現(xiàn)web瀏覽器之外的新應(yīng)用程序,Wasm正在經(jīng)歷這樣的轉(zhuǎn)變。無服務(wù)器功能已經(jīng)取得了很大的成功。但要實(shí)現(xiàn)跨越式發(fā)展,這項(xiàng)技術(shù)需要更快、更穩(wěn)健的基礎(chǔ)——Wasm就是這樣一種技術(shù)。

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無評(píng)論