WebAssembly正逐漸成為FaaS的主力

DisonTangor發表於2021-07-29

相信很多人都知道PaaS(平臺即服務)和IaaS(基礎設施即服務)。而隨著雲端計算時代的發展,逐漸出現了大量的XaaS形式的概念,這些技術從原先的硬體伺服器,虛擬化服務,再到容器化逐漸轉變。使得軟體釋出的成本越來越少,服務資源的利用率越來越高。現如今,我們大多數開發者們都一定知道Docker和Kubernates這兩個容器管理軟體的代表。最近較為關注CNCFBytecode Alliance,我看到一篇《Serverless Open-Source Frameworks: OpenFaaS, Knative, & more》和WasmEdge相關的新聞。於是,想聊聊WebAssembly和FaaS的定義和關係。

什麼是FaaS?

FaaS(全稱:Function as a Service),功能即服務,也正是眾所周知的Serverless computing(無伺服器運算),一種雲端計算服務。它允許您執行程式碼以響應事件,而無需通常與構建和啟動微服務應用程式相關的複雜基礎設施。Serverless並不是說沒有伺服器參與,它通過將複雜的伺服器架構透明化,使開發者專注於“要做什麼”,從而強調了減少開發者對伺服器等計算資源的關注、工作粒度從伺服器切換到任務的思想。由此可以看出,資源的顆粒度正在逐漸細化。而AWS和Azure都推出過各自的Serverless服務,例如 AWS LambdaAzure Functions

WebAssembly的發展簡史

WebAssembly這是一個在2018年前端和後端非常火的詞。Docker 的創始人 Solomon Hykes 曾對此這樣評價“如果2008年的時候,WASM(WebAssembly)和 WASI(WebAssembly System Interface, WASM系統介面)這兩個東西已經存在了的話,他就沒有必要創立 Docker了。"
但是回到最初,JavaScript隨著Chrome市場佔有率的不斷攀升,也與之水漲船高。很多人前端開發者們逐漸傾向於JS開發。但是Mozilla作為瀏覽器界的巨輪,他覺得瀏覽器即使引入Adobe的Flash或是微軟的Silverlight都不足以提供更強大的計算效能,於是,Mozilla內部啟動了一個asm.js的專案。

其最早發明出來是為了將C++的轉譯成JS,然後在瀏覽器中執行起來,這樣就能把大量現有的C++程式碼在瀏覽器中複用。被轉譯後的JS程式碼比原生的JS程式碼要慢,Mozilla的工程師發現一種型別系統,可以讓被轉譯後的JS執行得更快,這就是asm.js。當瀏覽器的JavaScript 引擎發現執行的是 asm.js時,就會跳過語法分析這一步,將其轉成組合語言執行。另外,瀏覽器還會通過 GPU 呼叫 WebGL 執行 asm.js,使其執行得更快。同時,其他瀏覽器廠商發現asm.js的執行速度非常快,也把這種優化加入到他們的瀏覽器引擎中。這僅僅是開始,工程師們仍在持續努力,但是,不是將其他語言編譯成JS,而是一種新的語言,那就是WebAssembly。

雖然這個技術的確提高了瀏覽器執行運算的效能,但是很長時間都始終無法找到一個合適的運用場景。

  1. 遊戲公司一般只用遊戲引擎和OpenCL(或Vulkan)進行整合,專門優化3D渲染和場景特效。這是WebGL做不到的。
  2. 雲端計算的發展使得後端的算力不斷加強,而資料頻寬也從MBps到達TBps,系統資料都集中在雲服務上。這也使得wasm的優化成了雞肋。
  3. 移動端擴張速度很快,谷歌雖然放棄了chrome extensions的市場,但是他又提出了PWA的技術,這樣也讓HTML5的技術門檻下降不少,移動端的開發者們對於wasm的熱情也就淡下許多。

而 Bytecode Alliance 的成立卻打破了這片“寂靜”。他們根據 Node.js 的經驗,將 wasm 從前端開發轉向了全棧開發。他們開發了一整套 WASI,並提供了WasmtimeCraneliftlucetWAMR 等專案。而 Wasmerwapm 的出現也使得 WebAssembly 正重新回到所有開發者的視野。

WasmEdge來了, DockerCRI-O慌了?

WasmEdge runtime (曾名 SSVM)是一個輕量級高效能 WebAssembly (WASM) 虛擬機器,為邊緣進行了優化。WasmEdge 可以應用於 severless 雲函式、SaaS、區塊鏈智慧合約、物聯網、汽車實時軟體應用等多種場景。他也是首次實現將 Webassembly 做成 OCI 容器,似乎正打破容器時代——楚漢爭霸的格局。但我們也需要知道的是 WebAssembly 主要在瀏覽器裡普及率高,但在伺服器端普及率低,這是因為在伺服器端它的排程能力不強,缺乏 DevOps 的解決方案。目前是需要自身去管理程式,管理資源分配。所以能夠把 WebAssembly 和 Kubernetes 結合起來,是一個非常前沿的領域。所以 DockerCRI-O目前仍然是兩大容器規制的標準。

而且容器主要以虛擬library boundary環境為主,提供比FaaS更高的層級——CaaS。這也使得WebAssembly不能直接搶佔Docker和CRI的雲端計算市場。因為Docker和Kubernates的生態都非常健壯。但是我認為 WebAssembly 正逐漸成為 FaaS 的主力。因為WebAssembly早已在前端擁有大量的技術支撐,而在後端正一步步地與各種語言開發庫進行結合。這也會促成FaaS的發展方向更趨向於去中心化和分散式系統的發展。而這樣的發展需求也可以從華為和蘋果都提出搞一體化產業生態可以看出,但是這一切都需要我們開發者們不斷地學習和思考,才能一起去逐步實現!

相關文章