出品|開源中國
文|lola_chen
WebAssembly(Wasm)是由 Mozilla 、谷歌、微軟、蘋果等公司合作研發的二進制指令格式語言,最初是為瀏覽器設計的,具有內存安全、可移植等特性。
2019年12月5日,W3C 正式宣布 WebAssembly 成為繼 HTML、CSS 和 Javascipt 之后的第四大標準Web語言。這是 WebAssembly 在前端的高光時刻。
同樣是2019年,Mozilla、Fastly、Intel 與 Red Hat 宣布成立聯合組織 Bytecode Alliance(字節碼聯盟),希望通過協作實施標準和提出新標準,以完善 WebAssembly 在瀏覽器之外的生態。
隨后,WebAssembly 在后端走得越來越遠。Docker 聯合創始人 Solomon Hykes 在一條著名 tweet 里表示,如果 Wasm + WASI 在 2008年就存在了,就沒有必要創建 Docker 了。
一時喧嘩,關于 Wasm 會不會取代 Docker 的討論不在少數,大多觀點認為,相比 Docker,Wasm 的確具有更快更輕等優越性。但實際上,Solomon Hykes 的這條推文卻有后半句沒說完(往下看)。
那么,Wasm 會取代 Docker 嗎?經過幾年發展,WebAssembly 又發展到了何種地步?開源中國有幸專訪了 WasmEdge 項目的發起人 Michael Yuan ,作為全球范圍內首個被 CNCF 納入托管的開源 WebAssembly runtime 項目,WasmEdge 在近期發布了 WasmEdge 0.8.2全新版本,并且還將發布新功能,讓 K8S 能夠直接接入。
OSCHINA:請自我介紹一下。
Michael: 大家好,我叫 Michael Yuan, 是開源老兵。 我并不是計算機專業出身,從本科到博士,我都是學天體物理的。我博士畢業后,就參與到開源的世界。那時候,微軟還在將開源視為社會毒瘤。
我從 Java 開始做起,參與創建了服務端 Java 公司叫 JBoss,這是第一個用開源的方法做 Java 中間件的公司,也是第一個真正找到商業模式的開源公司。后來 JBoss 被紅帽軟件收購了。然后我就一直留在了開源行業。
我現在的身份是 CNCF 沙箱項目 WasmEdge 的發起人與 Maintainer,同時也是 Second State 的創始人,Second State 開發和商業化 WebAssembly 和 Rust 生態系統中的企業應用。
OSCHINA:您獲得天體物理學博士學位是我們意想不到的,是怎樣的契機使您接觸到WebAssembly的呢?您見證了WebAssembly怎樣的變遷?
Michael: 其實當時開源行業的人很多都不是計算機專業畢業的。在那個年代,找不到工作的人才去做開源的。我們做 Jboss 的時候,公司里有不少物理博士,包括當時的 CEO 與 CTO 都是物理博士。
從 Java 到今天,后端技術的發展就是不停地重新發明輪子(也可以說是“螺旋式上升”)。 年輕的開發者總是從前端開始職業生涯,過了一段時間后,曾經是前端的開發轉到后端,他們遇到的第一個問題就是這個東西怎么這么復雜?我就要寫一個網頁再加上數據庫,為什么要學習這么復雜的分布式計算框架?所以他們就會重新發明輪子,這在后端的歷史上發生了三次。
第一次就是 Java。Java 以前是為了瀏覽器發明的。現在,我們已經知道 Java 完全是一個后端的語言。2000年左右,也是我當時在 JBoss 創業的時候,抓住了 Java 從瀏覽器端向服務端轉變的紅利。這個時候,大家對 Java 的看法是什么呢?和其他后端開發框架相比,Java 的優勢是簡潔和易懂,寫的程序安全可移植。
第二次則是 JavaScript。到了2010年,絕大部分新來的開發者對 Java 的感覺就是太復雜了,于是就有了 JavaScript 從前端轉變成后端,有了 Node.js,所以現在大部分后端技術都是用 JavaScript 開發的。Node.js 當時主要的優勢是簡單,開發效率高。
時間來到2020年,也是我們創建 WasmEdge 這個開源項目的時候。這個時候,大家對 Node.js 的抱怨是太復雜了。npm install 一下,安裝幾百個安裝包,都不知道安裝了什么東西。我們看見的新一代開發范式是 Serverless 與微服務。把每個業務單元做小做簡單,解耦業務與基礎架構,從而讓開發與運維都簡化。
也正因為此,目前的“大前端”、Jamstack、“前端的后端”等創新都在大量使用 Serverless。而后端的服務網格、云原生,則在使用容器化微服務。Serverless 與微服務都需要比 Docker 更輕更快的安全運行沙盒。WebAssembly 開始從前端走向后端。
和 Java 當年的發展路徑很像。Java Applet 最初是為了在瀏覽器玩游戲,是為了在瀏覽器內提高性能,但是20年來,有一件事一直沒有變過:大家不喜歡在瀏覽器玩游戲。所以雖然在瀏覽器市場占有率很高,但是WebAssembly 在前端的發展并不成功。我們看不到幾個 WebAssembly 在瀏覽器的案例,就像我們今天在瀏覽器看不到幾個用 Java 的程序一樣。
但是 WebAssembly 有一個非常成功的地方。因為瀏覽器是互聯網大廠的游戲,所以要在瀏覽器里行成標準,必須要有全行業的共識。WebAssembly 不但后面有 Google、Apple、Mozilla、微軟這樣的大廠,而且還有 W3C 這樣的組織。
這就造成了 WebAssembly 可以像當年的 Java 一樣做出一個強大的生態。具體的例子,比如 GCC 、LLVM 等編譯器支持把各種高級語言編譯成 Wasm 字節碼。這種生態的支持程度,不是任何一個獨立的大廠或者組織能夠獨立做到的。這也是 WebAssembly 放到服務器端有巨大生命力的原因。
雖然在前端沒有現象級的應用,但是WebAssembly 實現了標準化。這是別的技術很難去和 WebAssembly 競爭的地方。所以,WebAssembly 有很大前景變成一個通用的計算執行環境或者容器,不僅會放在云端,也會用在邊緣設備上。
OSCHINA:WasmEdge 0.8.2全新版本有哪些功能更新?跨平臺能力提升、增加了golang sdk的支持等,都是WasmEdge在兼容性上所作的努力,是否可以認為WasmEdge目前最緊迫的問題是兼容性問題?
Michael:
WasmEdge 0.8.2 的功能更新主要是:
更好的跨平臺兼容性。開發者可以在 Mac OS X(Intel 和 M1)、Windows 10 以及配備 ARM 32 位芯片的 IoT 設備上運行 WasmEdge 應用程序。
Networking 支持。WasmEdge 應用程序發出網絡請求并運行 HTTP 服務器。
新的以及一些改進的 API。在 C、Rust 和 Golang 應用程序中嵌入 WasmEdge 函數。
WasmEdge 的 AoT 編譯器的通用二進制輸出。利用云原生平臺中的 AOT 性能增進。
支持 proxy-wasm 標準。
講到兼容性,其實有兩個方面:
一個是 WebAssembly 里面運行什么,比如能不能運行 JavaScript,還是必須依賴編譯型的語言(Rust、C/C++、Swift 等)。這個我們走的路是全面支持 JavaScript 與 DSL 。
另外一個是 WebAssembly 能夠在什么環境里運行。這方面,我們有不同的語言的 SDK,比如 Golang、C 與 Rust,支持 k8s 等等。
所以我不認為這是一個兼容性問題,而是生態問題。雖然 WebAssembly 在前端進行了標準化,有編譯器、瀏覽器的支持,但是后端畢竟還是有自己的一套生態,還是需要盡快把 WebAssembly 整合到后端的生態里面去,這是我們今天正在要干的事情。
比如我們正在把 WasmEdge port 到 seL4 上,seL4 是一個可以形式化驗證的開源實時操作系統 RTOS 。我們也在 WasmEdge 里原生支持了 TensorFlow 框架,開發者可以通過 WasmEdge 以本地速度調用 TensorFlow 模型,進行推理。與此同時,我們自己在 Crun 與 Runc 的基礎上開發了 Crunw,讓 K8s 支持 WebAssembly。
OSCHINA:讓K8s能夠直接管理,這代表著什么?
Michael: K8s 是管理微服務和服務網格的重要工具,這樣就意味著 Wasm 應用可以在服務網格里成為一等公民,直接用來實現微服務,不需要借助其他工具和框架。微服務和服務網格是 Serverless 的基礎架構,一旦 K8s 支持 Wasm,Wasm 在 Serverless 、微服務領域就會成為一等公民。
有了 Crunw 之后,WasmEdge 能夠無縫融入現有的 K8s 生態。現在有很多基于 K8s 的產品都在與 WasmEdge 合作,比如 Linkerd、KubeEdge、SuperEdge 等。
OSCHINA:WebAssembly會取代Docker嗎?同類型的有哪些?相比而言,WasmEdge的優勢在哪?
Michael: 在回答這個問題之前,我們先來總結一下目前的容器方案。
Fastly CTO Tyler McMullen 最近說了三句話:虛擬機模擬了計算機,容器模擬了操作系統,WebAssembly 模擬了進程。這三句話怎么理解呢?我們之前發表過一篇文章,和他想表達的東西有異曲同工之妙。我們把容器分為三層:
第一層是系統級或者是硬件級的虛擬機,比如 Hypervisor 或 MicroVM,會運行操作系統與Runtime 軟件堆棧;
第二層是應用容器,比如 Docker,容器會在運行用戶代碼前,加載和啟動有操作系統的鏡像;
第三層是高級語言虛擬機,比如 JVM、V8 和 WebAssembly。WebAseembly 只是執行編譯好的字節碼應用,不起操作系統的作用。
理解了這三個層次,就會理解到 WebAssembly 是抽象程度最高的,需要的工具鏈最復雜,但是帶來了性能的巨大的提高。
回到 WebAssembly 能不能取代 Docker 的問題上,這個說法來自 Docker 聯合創始人 Solomon Hykes 的一個 tweet。在那條動態里,他說如果 Wasm + WASI 在 2008年就存在了,就沒有必要創建 Docker了,Wasm 是云計算的未來。
很多人只看到了這一句話,沒有看到他后面補發的內容,他說 WebAssembly 不會取代 Docker,Docker 與 WebAssembly 會肩并肩運行。
在他講這句話的時候,WebAssembly 的 K8s 生態還沒成熟,他這條推特就是在說會在 K8s 里肩并肩運行 WebAssembly 與 Docker,而這也是我們認為的未來,所以我們有 crunw。
所以 ,WebAssembly 與 Docker 不是一個取代關系。WebAssembly 與 Docker 是各有所長、互相補足的關系,就像之前提到的,WebAssembly 對工具鏈要求比較高,但是 WebAssembly 的性能高、輕量級、安全的特點會讓 WebAssembly 用在今天 Docker 進不去的場景。舉個具體的例子,WebAssembly 在冷啟動方面,能夠比 Docker 快100倍。所以 Docker 很難 fit in 的邊緣計算、輕服務、汽車、區塊鏈,都是 WebAssembly 的用武之地。
OSCHINA:您認為未來的云原生容器會形成怎樣的格局?在其中,WebAssembly會占據怎樣的地位?WasmEdge會發揮什么樣的作用?
Michael: WasmEdge 這種新容器的發展是擴展了容器或虛擬化的生態。以前,很多地方有虛擬機化的需求,但是 Docker 做不進去,或者 Docker 做得不好,比如 Serverless、邊緣設備、邊緣云。
這些都是有原生虛擬化的場景,但是 Docker 比較重,比較大,沒有辦法做到這個場景,所以用 WebAssembly 能夠擴展這個市場。WebAssembly 的市場是個增量,并不是要把 Docker 擠出來。
在 AOT 模式下,WasmEdge 是目前市場上最快的 WebAssembly 虛擬機。另外,WasmEdge 的最大不同之處在于,為了能夠讓 WebAssembly 盡快在云原生領域應用,WasmEdge 還支持了非標準的擴展,比如 KV Store、網絡 Socket、TensorFlow 等擴展,可以說 WasmEdge 是離場景最近的 WebAssembly Runtime。 作為 CNCF 唯一的 Webassembly Runtime 項目,我們希望成為WasmEdge 成為云原生和邊緣計算的輕量級容器首選。
(WasmEdge 架構圖)
最后,想和大家說,我們很看好 WebAssembly 的發展,如果你對 WebAssembly 有興趣的話,歡迎來我們 GitHub 或 Gitee 上看看:
https://gitee.com/mirrors/wasmedge
https://github.com/WasmEdge/WasmEdge
嘉賓簡介:
Michael Yuan 畢業于德克薩斯大學奧斯汀分校,獲得博士學位。Michael 是 JBoss 的早期員工,被 Red Hat 收購之后,作為產品經理見證了世界上第一個成功的開源商業模式,著有5本國際知名出版社出版的技術書籍。2019年 ,Michael 發起了 WasmEdge 項目,提供下一代云原生和邊緣計算的執行環境。
昨天,微信視頻號推出了一項新功能,即付費直播室。作為一個整體
用戶顯然不喜歡這種充電功能。他們一個接一個地說:“如果你給我錢,你不必看視頻號碼。現在你還收費嗎?”
據了解,微信視頻的第一個直播室是騰訊NBA,主要播放NBA常規賽。進入直播室后,用戶可以免費觀看3分鐘,3分鐘后需要支付90個微信豆
(蘋果:7個微信豆1元,安卓:10個微信豆1元)。蘋果用戶需要支付近12.8元,而安卓用戶需要支付9元。
乍一看,微信視頻號似乎即將開始削減韭菜,但實際上,這只是一種嘗試,以創造更多有價值的內容。
直播在電子商務、金融、教育培訓等行業似乎發揮著不可替代的作用。現在微信也開始布局直播,從小節目到群組直播,再到視頻號碼。今天,我們來了解一下微信直播的三種方式。
1.現場直播
自2020年2月起,小程序開始了直播公測,但小程序的直播功能主要是為b端用戶提供,幫助b端用戶銷售商品。
applet的直播主要用于銷售商品。有很多直播功能,比如喜歡、評論、甚至小麥、抽獎、產品發布、優惠券發布、美容、過濾等。這些功能適合主播帶來商品。此外,主播還可以通過海報卡和聊天窗口與他人分享。此外,主播還可以建立一個副主播號碼,禁止有節奏或戰爭的講話。
最重要的是直播后的回放功能,因為直播回放可以讓主持人發現直播的缺點和優點,避免在下次直播中犯同樣的錯誤。
但是,applet live broadcast僅適用于符合applet live broadcast類別并已驗證其真實姓名的企業。記得帶營業執照。
2.團體直播
自2020年8月起,集團直播開始進行灰度測試,但集團直播的觀眾只能是集團成員,提供集團成員的實時視頻功能。
對團體直播有很多限制。例如,人數只能是500人或更少,只能在群聊中共享,直播的交互功能只能是喜歡、評論甚至是小麥。
小組直播更適合小組成員的講座或會議,而不是攜帶物品、大規模培訓等場景。
3.現場視頻
從2020年初的測試到10月的開放,視頻號碼的直播備受期待。與小節目和群直播相比,視頻號直播更方便,因為可以在微信發現視頻號上進行直播。然而,在直播視頻號碼之前,主播需要驗證視頻號碼的真實名稱。
視頻號碼的直播互動除了具有美容、過濾、禁詞等直播的基本功能外,還可以使用喜歡、評論、甚至小麥、獎勵、抽獎、網上商品等,視頻號碼更適合主持人植草、積累流量。當然,它也可以在未來與商品一起播放。
在閱讀了以上微信三種直播方式的介紹后,我們對它們有了大致的了解。
未來將開放中長視頻和短視頻的收費或獎勵功能。
此外,微信視頻直播還將投資50億冷啟動流量套餐,幫助新主播獲得流量,幫助新主播成長。
此前,微信視頻還進行了試水和現場直播,先后推出了《西城男孩》和《五月天》兩場在線演唱會,觀眾分別為2700萬和1400萬。
其中,西城男孩音樂會的在線觀眾人數超過150萬。
相比之下,線下場館的容量非常有限。像鳥巢這樣的大型場館只能容納10萬多名觀眾。在其他場館,它可能只能容納1萬或2萬人。顯然,在線場館的容量基本上是無限的。
雖然你無法在網上體驗無與倫比的氛圍,但網上成本更低,受眾更廣。
即使千萬觀眾的轉化率只有1%,也能帶來巨大的收入空間。