作者丨 B. Cameron Gain
譯者丨千山
很難相信,自從2001年互聯(lián)網(wǎng)泡沫破滅以來(lái),已經(jīng)過(guò)去了20多年。每當(dāng)科技處于周期性下行軌道時(shí),它仍然是潛在厄運(yùn)的前兆。我清楚地記得,在2001年經(jīng)濟(jì)崩盤(pán)后不久,我曾和一些IT領(lǐng)域的失業(yè)者、待業(yè)者一起,整天無(wú)所事事地閑逛。
某天,在紐約的一個(gè)公園里,我的一個(gè)朋友坐在公園的長(zhǎng)椅上敲著他的筆記本電腦,他說(shuō)有一個(gè)非常酷的網(wǎng)站創(chuàng)建工具叫Java。
實(shí)際上,時(shí)間已經(jīng)過(guò)去很久了,但我至今記憶猶新。
朋友興奮地描述著這樣的圖景:你可以用Java代碼編程,并部署在你想要的任何地方,這是多么令人驚嘆。這在改變網(wǎng)站用戶體驗(yàn)方面發(fā)揮了關(guān)鍵作用,尤其是和上世紀(jì)90年代相比,彼時(shí)還是HTML代碼提供網(wǎng)站設(shè)計(jì)的主要元素。
“當(dāng)然,為什么不呢,我去看看,”我回應(yīng)道。
之后就是我們大家都熟知的歷史了:不僅在Web開(kāi)發(fā)中,Java在整個(gè)IT基礎(chǔ)設(shè)施中都占據(jù)了一席之地。
快進(jìn)到今天:有一個(gè)叫做WebAssembly或Wasm的東西,它提供了非常類似的聲明:一次編譯,到處運(yùn)行。它不僅適用于最初創(chuàng)建的Web應(yīng)用程序,而且適用于跨網(wǎng)絡(luò)和在CPU上運(yùn)行的任何東西。
這有沒(méi)有讓你聯(lián)想到什么?
企業(yè)管理協(xié)會(huì)(EMA)的分析師Torsten Volk評(píng)論道:“Wasm可能是Java的孫子,它遵循了一脈相承的原則,即允許開(kāi)發(fā)人員在任何設(shè)備上運(yùn)行相同的代碼,但與此同時(shí),Wasm還修復(fù)了阻止‘在任何設(shè)備上運(yùn)行Java’的初心成真的基本問(wèn)題。”
1、簡(jiǎn)單案例
Wasm已被證明在許多不同的硬件環(huán)境中非常有效,從服務(wù)器端到邊緣部署和物聯(lián)網(wǎng)設(shè)備,或者任何代碼可以直接在CPU上運(yùn)行的地方。
代碼捆綁在整齊打包的Wasm可執(zhí)行文件中運(yùn)行,可以將其與容器甚至迷你操作系統(tǒng)相比較,后者運(yùn)行時(shí)所需的代碼和目標(biāo)配置要少得多(如果有的話)。從本質(zhì)上講,無(wú)論代碼部署在哪里,應(yīng)用程序都比僅僅局限于Web瀏覽器環(huán)境要遠(yuǎn)得多。因此,開(kāi)發(fā)人員創(chuàng)建代碼并部署它。它真的可以這么簡(jiǎn)單,尤其是在使用PaaS解決方案時(shí)。
Volk指出,最重要的是,Wasm實(shí)現(xiàn)了真正的“一次編譯,到處運(yùn)行”功能,即相同的代碼可以在任何受支持的設(shè)備上運(yùn)行,而不需要重新編譯。
“Wasm不局限于一種開(kāi)發(fā)語(yǔ)言,而是支持Python和許多其他流行語(yǔ)言。開(kāi)發(fā)人員可以在服務(wù)器和其他設(shè)備的共享環(huán)境中運(yùn)行他們的代碼,而不必?fù)?dān)心底層的Kubernetes集群或虛擬機(jī)管理程序,”Volk說(shuō)。“他們還為他們的微服務(wù)接收統(tǒng)一的日志記錄和跟蹤,開(kāi)箱即用。與Java相比,這種簡(jiǎn)化的開(kāi)發(fā)體驗(yàn)是另一個(gè)巨大的優(yōu)勢(shì)。”
在最近的KubeCon+CloudNativeCon會(huì)議上,有人發(fā)表了關(guān)于使用Wasm取代Kafka以降低時(shí)延的演講。與此同時(shí),Java繼續(xù)被用于網(wǎng)絡(luò)應(yīng)用程序,盡管替代方案可以提供更好的性能,但開(kāi)發(fā)人員仍然在使用它,因?yàn)樗麄冎皇窍矚g使用Java。由此推斷,即使Wasm的運(yùn)行時(shí)性能不是很好,開(kāi)發(fā)人員仍然可能僅僅因?yàn)槭褂煤?jiǎn)單而采用它。
“Wasm的一大優(yōu)點(diǎn)是,開(kāi)發(fā)人員很容易上手,只需部署一些代碼并立即觀察其運(yùn)行即可。這種價(jià)值主張可能需要一段時(shí)間才能完全理解,可是一旦你迷上了,你就不想再擔(dān)心底層基礎(chǔ)設(shè)施的里里外外了,”Volk說(shuō)。“然后你可以決定是否有必要替換Kafka,或者你只是想把它連接到你的Wasm應(yīng)用程序上。”
Java的整個(gè)“一次編譯,到處運(yùn)行”的承諾與WebAssembly非常相似,F(xiàn)ermyon Technologies的首席執(zhí)行官兼聯(lián)合創(chuàng)始人Matt Butcher提到:“事實(shí)上,Luke (注:Luke Wagner是WebAssembly的初作者)曾經(jīng)告訴我,他認(rèn)為Java是20年的有用研究,構(gòu)成了如何編寫(xiě)下一代(例如Wasm)的基礎(chǔ)。”
2、還是不一樣
Java和Wasm之間有一個(gè)關(guān)鍵區(qū)別:它們的安全態(tài)勢(shì)。
它的可移植性和一致性可以使安全性和合規(guī)性更易于管理(同樣,它在 CPU 級(jí)別以二進(jìn)制格式運(yùn)行)。此外,Wasm結(jié)構(gòu)的簡(jiǎn)單性意味著代碼在封閉的沙盒環(huán)境中發(fā)布,幾乎直接發(fā)布到端點(diǎn)。Java(以及 .NET)的默認(rèn)安全狀態(tài)是“信任它正在運(yùn)行的代碼”,而Java授予代碼對(duì)文件系統(tǒng)、環(huán)境、進(jìn)程和網(wǎng)絡(luò)的訪問(wèn)權(quán)限。
“相比之下,Wasm的默認(rèn)安全狀態(tài)是不信任在語(yǔ)言運(yùn)行時(shí)中運(yùn)行的代碼。對(duì)于Fermyon(以云和邊緣為中心)來(lái)說(shuō),這是使Wasm成為云服務(wù)的良好候選的關(guān)鍵特性,”Butcher指出。
因?yàn)樗c容器和虛擬機(jī)采取的安全態(tài)勢(shì)相同。這使得我們作為云供應(yīng)商可以向用戶銷售服務(wù),而無(wú)需審查或批準(zhǔn)用戶的代碼。
換句話說(shuō),在使用分布式容器化和微服務(wù)環(huán)境時(shí),需要擔(dān)心的攻擊點(diǎn)數(shù)量呈指數(shù)級(jí)增長(zhǎng)。Volk同意Matt的評(píng)估,因?yàn)橐揽苛阈湃卧瓌t允許基于相同技術(shù)的多租戶,如mTLS和jwt,這些技術(shù)已經(jīng)用于在Kubernetes上運(yùn)行的應(yīng)用程序容器。
“這使得Wasm很容易在共享環(huán)境中安全地試用,這應(yīng)該會(huì)降低入門(mén)的初始障礙,”Volk說(shuō)。
Java和Wasm之間的另一個(gè)巨大區(qū)別是Java需要JVM并且不需要額外的資源,比如垃圾收集器,InfinyOn的首席技術(shù)官Sehyo Chang如是說(shuō)。
“另一方面,Wasm非常接近底層CPU,不需要GC或其他繁重的粘合邏輯,”Chang說(shuō)。“這使得Wasm能夠在非常低功耗的CPU上運(yùn)行,適合在嵌入式設(shè)備或物聯(lián)網(wǎng)傳感器中運(yùn)行。”
3、結(jié)語(yǔ)
很多人認(rèn)為Wasm的未來(lái)就在于能在瀏覽器之外運(yùn)行它。正如Matt Butcher所說(shuō),Wasm像虛擬機(jī)和容器一樣,能夠在云中運(yùn)行,這才是真正令人興奮的地方。
雖然Wasm還很年輕,但它提供的種種可能性已經(jīng)非常有吸引力。憑借著與瀏覽器高度匹配的各種特性,Wasm在瀏覽器之外更有種“海闊任魚(yú)躍、天高任鳥(niǎo)飛”的意味。終有一日,Wasm會(huì)發(fā)展出更美好的未來(lái)圖景。
原文鏈接:https://thenewstack.io/javas-history-could-point-the-way-for-webassembly/