目前大火的 Jamstack 到底是什麼?

作者:Timothy McCallum、Miley Fu 與 Vivian Hu

Jamstack 是一套用於構建現代互聯網應用的技術棧。它在邊緣雲、serverless 計算、以及大前端有廣泛的應用,也在今年受到資本市場的追捧。它到底有什麼魔力呢?這篇文章將帶你瞭解 Jamstack 的概念以及開發範式。我們也將討論 Rust 與 WebAssembly 這樣的新興技術如何讓 Jamstack 更快,更安全,更易用。

什麼是 Jamstack?

Jamstack 是一種構建網站和 web 應用程序的新方法。Jamstack 的 Stack 指的是許多獨立,但是可以組合的技術棧。當它們結合在一起時能夠提供一個完整的 web 應用。

Jamstack 架構中的 JAM 是指客戶端 JavaScript、可重用的後端 API,和用戶界面的 Markup,比如 HTML 與 CSS。

Jamstack 的關鍵特徵是前端 Web UI 與基於 API 的後端服務之間的清晰區分。與垂直集成的傳統 Web 應用程序不同的是, Jamstack 應用程序是模塊化和分散式的:UI 可以通過靜態網頁服務器、CDN、甚至基於區塊鏈的存儲進行分發;後端 API 服務可以部署在雲上,也可以由邊緣節點就近提供服務。

爲什麼 Jamstack 超級贊?

從技術棧比較的角度來看,用於開發 Web 應用程序的另一個常見技術棧是 LAMP (Linux, Apache, MySQL, PHP) 以後其後的 MEAN (MongoDB, Express.JS, Angular, Node.JS)。

LAMP 概覽

圖片:K7.india at English Wikipedia, CC BY 3.0 https://creativecommons.org/licenses/by/3.0, via Wikimedia Commons

從上面的圖表可以看出,從應用開發者的角度,當使用 LAMP 技術棧時,有很多的組件可以安裝,並且可以同時配置和維護。LAMP 應用的用戶界面是由後端服務器動態生成的。絕大部分邏輯與計算都在服務器上。前端的瀏覽器只負責渲染。

JAM 概覽

與 LAMP 技術棧相比,Jamstack 在許多不同之處 ,這對開發者構建網站或 web 應用的方式有着深遠的影響。從部署架構上講,Jamstack 應用的用戶界面是通過 “編譯” 生成的靜態網頁,從而大大提高了性能,安全性,以及降低了服務端的複雜度與計算負載。

從開發者的角度來看,一些主要的區別包括:

總體而言,選擇使用 Jamstack 創建網站和 web 應用有 4 個主要好處: 成本效益、性能改進、更好的安全性和更好的用戶 / 開發者體驗

JAM 組件

讓我們先快速看一下構成 JAM 的 3 個組件; Javascript、APIs 和 Markup。然後,我們會重點關注動態可編程的 API 組件。

Javascript

毋庸置疑,JavaScript 是網絡上最流行的編程語言之一。Javascript 允許 Web 應用開發者在 HTML 頁面中輕鬆地進行請求後端服務產生的動態內容。這些安全的 HTTP 請求 (由客戶端發出) 可用於調用遠程 API 端點並將結果返回給客戶端(應用)。

API

API 是以微服務的形式訪問動態數據的一種很好的方式。互聯網上有許多公開可用的 API 端點,它們可以返回大量很有用的數據。其中一個例子是太陽系開放數據 API,它可以返回所有行星、衛星、矮星、彗星和小行星等各種數據。

這裏有一個例子,說明了我們如何通過 API 獲得水星的軸向傾斜。

https://api.le-systeme-solaire.net/rest/bodies/mercury

這個 API 服務節點返回相當多的數據,如下所示。

{
 "id""mercure",
 "name""Mercure",
 "englishName""Mercury",
 "isPlanet": true,
 "moons": null,
 "semimajorAxis": 57909227,
 "perihelion": 46001200,
 "aphelion": 69816900,
 "eccentricity": 0.20560,
 "inclination": 7.00000,
 "mass"{
  "massValue": 3.30114,
  "massExponent"23
 },
 "vol"{
  "volValue": 6.08300,
  "volExponent"10
 },
 "density": 5.42910,
 "gravity": 3.70000,
 "escape": 4250.00000,
 "meanRadius": 2439.40000,
 "equaRadius": 2440.53000,
 "polarRadius": 2439.70000,
 "flattening": 0,
 "dimension""",
 "sideralOrbit": 87.96900,
 "sideralRotation": 1407.60000,
 "aroundPlanet": null,
 "discoveredBy""",
 "discoveryDate""",
 "alternativeName""",
 "axialTilt": 0.0352
}

正如這裏能看到的,到目前爲我們無需設置任何服務器基礎設施就可以訪問動態內容。讓我們快速查看如何使用 JAM 管理該項任務,即幾行 Javascript 來得到數據,以及一些 markup 來將數據作爲有效信息展示。

Markup

Markup 使我們可以非常容易地創建視覺上令人滿意的網頁。爲了演示這一點,我創建了一個簡單的 HTML 頁面 (源代碼在這裏),你可以試一下,如下圖所示。

圖片來源:NASA/Johns Hopkins University Applied Physics Laboratory/Carnegie Institution of Washington. Edited version of Image:Mercury in color — Prockter07.jpg by Papa Lima Whiskey., Public domain, via Wikimedia Commons

你會注意到,這個 demo 僅使用 GitHub pages 託管。當然,你也可以將 HTML 源代碼複製到本地的文件夾,並在 PC 本地將它打開。根本不需要運行服務器。使用內容分發網路 (CDN) 還可以幫助你將客戶端的響應時間減到最少。

如果你想生成一個更爲花哨的靜態站點,有很多軟件產品可以幫助你,比如 Gatsby 、Hugo、Netlify 、Vercel 等等。

無需服務器,創建和發佈你自己的 API 端點

圖片來源:SpaceX, CC0, via Wikimedia Commons

剛剛演示了我們不費吹灰之力地從公開可用的公共端點獲取數據。但是……

如果你可以創建和部署自己的 API 端點,但不想要任何額外的服務器,有沒有什麼辦法 🤔 ?

我們不僅可以訪問開放數據 (如上所示) ,編寫自己定製的邏輯來處理數據、圖像和視頻。我們還可以與其他人共享我們開發的 API 端點 (自定義函數) 。

Serverless 服務

顧名思義,serverless 服務讓開發者在不運行自己的服務器的情況下提供 API 服務。開發者只需要上傳一段代碼就可以提供服務。公有云一般來說提供兩種 serverless 服務。

細心的讀者可能已經發現,在公有云上部署 serverless API 服務並不完全適合 Jamstack 的理念。J 與 M 都已經通過邊緣雲部署了,爲什麼 A 不行呢?在邊緣雲上部署 serverless 函數的需要新一代的輕量級軟件容器。這是 CNCF 旗下的 WasmEdge 這種 WebAssembly 沙箱的重要應用場景。

WasmEdge 網址:https://github.com/WasmEdge/WasmEdge

Rust 函數計算服務

WasmEdge 可以部署在邊緣雲與邊緣設備上。它符合 OCI 標準,能被 CRI-O 與 Kubernetes 這樣的工具調度與管理。WasmEdge 可以讓開發者用 Rust 語言寫安全高性能的函數服務,也可以支持爲場景定製的 DSL 低代碼解決方案。

在這篇文章,我們用 Second State 公司基於 WasmEdge 發佈的一個免費 FaaS 服務作爲示例,來演示怎麼用 Rust 語言開發部署 Jamstack 應用的 serverless API 服務。

網址:https://www.secondstate.io/faas/

Second State 提供了跨雲的 FaaS 基礎設施,可以使用它來創建、部署和調用自己的定製函數。無論你想創建一個全新的 web 應用,遷移你現有的 web 應用,還是僅僅增強你 web 應用的客戶端 ,基於 WasmEdge 的 FaaS 都是很好的選擇。甚至不需要用戶名和密碼。所有的調用都是通過開放的 Web 、通過安全的 HTTP 請求執行的。幾分鐘內就可以部署一個自己的應用。

這裏有許多精彩的預建 demo 和教程,使你能夠學習如何創建自己的 FaaS 端點。這些預構建函數 (demo) 包括:

鏈接不可點擊,訪問 https://www.secondstate.io/faas/ 瞭解更多或者點擊閱讀原文。

你也來試試吧!

這裏的要點是,你可以創建自己的代碼執行服務,即在不提供任何基礎設施的情況下運行自己的自定義代碼。Second State 的 FaaS“允許開發者在不管理服務器的情況下在雲中上傳和執行代碼”。

下一步

這篇文章,我們介紹了 Jamstack 的基本概念,以及如何基於 WasmEdge 根據自己的需求快速開發出一個動態的 API。下一篇,我們將介紹如何在目前大火的 Vercel 中使用 WebAssembly Runtime/WasmEdge 在 Jamstack 應用中使用 Rust 函數來編寫 API。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/VMAB9DEnPr_VRlSE5HsZOw