FaaS 給前端帶來了什麼?
一.Serverless 與 FaaS
Serverless 是一種雲端計算理念,即無伺服器計算(Serverless Computing):
Serverless suggests that the cloud user simply writes the code and leaves all the server provisioning and administration tasks to the cloud provider.
將伺服器相關的配置管理工作統統交給雲供應商去做,使用者不必花很大精力去管理 Server(或雲資源),所以稱之為 Serverless
而 FaaS(Function as a Service)則是 Serverless 的關鍵:
Serverless 的核心是 FaaS(Function as a Service),但云平臺通常還提供 Serverless 框架來滿足 BaaS (Backend as a Service)等特定應用程式要求。因此,可以簡單理解為:
Serverless computing = FaaS + BaaS
由雲函式(Cloud functions)提供常規計算,輔以特定的 BaaS 產品生態(比如物件儲存、資料庫、訊息機制等),使用者專注實現其函式邏輯,極大地簡化了雲程式設計
聽起來似乎有些玄幻,不知哪年能夠成為現實,事實上,時至今日(2020/7/5)市面上已經有許多相對成熟的 FaaS 產品了
二.已經面市的 FaaS 產品
AWS Lambda
Amazon 早在 2015 年就推出了 AWS Lambda 服務:
AWS Lambda - Run code without thinking about servers. Pay only for the compute time you consume.
直接執行程式碼,而無需考慮伺服器(的管理和配置),按所使用的計算時間計費的雲端計算服務產品
也就是說,開發者只需要上傳程式碼,Lambda 能夠自動處理程式碼執行以及高可用性擴充套件所需的一切工作:
Just upload your code and Lambda takes care of everything required to run and scale your code with high availability.
主要應用場景包括:
-
資料處理
-
實時檔案處理:例如建立縮圖、轉換視訊程式碼、處理日誌等
-
實時資料流處理:比如跟蹤使用者訪問指標
-
機器學習:在將資料輸入到機器學習模型之前對其進行預處理
-
後端:處理 Web、移動、物聯網 (IoT) 和第 3 方 API 請求
還提供了小客戶免費試玩套餐:
-
AWS 中國(寧夏)區域免費套餐:25GB 的 NoSQL 資料庫 + 每月 100 萬請求量的雲函式 永久免費
-
AWS 海外區域賬戶免費套餐:相同配置,永久免費
阿里雲 FC
阿里雲也提供了 FaaS 方案,叫做函式計算:
函式計算 - 阿里雲函式計算是事件驅動的全託管計算服務。通過函式計算,您無需管理伺服器等基礎設施,只需編寫程式碼並上傳。函式計算會為您準備好計算資源,以彈性、可靠的方式執行您的程式碼,並提供日誌查詢、效能監控、報警等功能。藉助於函式計算,您可以快速構建任何型別的應用和服務,無需管理和運維。而且,您只需要為程式碼實際執行所消耗的資源付費,程式碼未執行則不產生費用。
應用場景如下:
-
低成本跨境檔案傳輸:大規模的檔案同步
-
檔案處理:例如對上傳至 OSS 的檔案進行壓縮/解壓、轉碼、加水印等
-
前端 CI/CD 系統:Webhook 通知觸發雲函式,將前端程式碼庫上傳至 OSS,走 CDN 部署
-
日誌 ETL 處理:加工、投遞資料
-
智慧家電:智慧家居、App 獲取天氣、環境指數
-
中小網站:例如基於函式計算 + wordpress 構建 serverless 網站
同樣提供了面向小客戶(1-10 人團隊)的免費套餐:
- 免費雲開發
但免費額度不太透明,並且不排除日後收取費用的可能
P.S.另外,阿里雲提供的OSS 似乎沒有免費額度,試玩需注意
騰訊雲 SCF
騰訊雲提供的 FaaS 產品是SCF(Serverless Cloud Function):
雲函式 SCF - 雲函式(Serverless Cloud Function,SCF)是騰訊云為企業和開發者們提供的無伺服器執行環境,幫助您在無需購買和管理伺服器的情況下執行程式碼。您只需使用平臺支援的語言編寫核心程式碼並設定程式碼執行的條件,即可在騰訊雲基礎設施上彈性、安全地執行程式碼。SCF 是實時檔案處理和資料處理等場景下理想的計算平臺。
主推的 4 大應用場景:
-
實時檔案處理:例如音訊/視訊轉碼
-
資料 ETL 處理:針對大資料集的併發分析處理(ETL 即典型的 Extract-Transform-Load 資料處理過程)
-
移動及 Web 應用後端:以雲函式的形式實現後端服務
-
AI 推理預測:AI 模型完成訓練後,對外提供推理服務
說是每月有一定的免費額度,但外網出流量不免費,試玩需謹慎
三.FaaS 給前端帶來了什麼?
有了 FaaS,意味著能夠:
直接執行後端程式碼,而無需考慮伺服器等計算資源以及服務的擴充套件性、穩定性等問題,甚至連日誌、監控、報警等配套設施也都開箱即用
也就是說,上線一個簡單的後端服務(比如介面聚合、資料編排),不再需要經驗豐富的專業後端工程師幫忙:
-
選擇技術棧
-
考慮高併發下的擴充套件機制
-
估算峰值流量,預配資源(申請機器)
-
走 CI/CD 流程
-
接入監控、運維體系
我們只需要提供一段程式碼,由雲供應商精心研製的 FaaS 方案幫我們選擇該程式語言對應的技術棧最佳實踐,基於內建的擴充套件機制按實際需要動態擴充套件計算資源,輕鬆部署服務到公網,並提供可靠的監控、報警保障
餵給 FaaS 一個函式,就能上線一個高可用的服務。(簡單)服務介面開發的專業性要求降低了,前端有了更大的發揮空間,包括但不限於:
-
BFF(Backend For Frontend)
-
SSR(Server-Side Rendering)
-
端雲一體化開發
BFF
Backend For Frontend (BFF)(使用者體驗適配層)的理念已經不新鮮了:
給每種使用者體驗對應一個後端(one backend per user experience)
也就是說:
BFF 是面向特定使用者體驗的,由實現這部分 UI 的前端團隊負責實現及維護(即 UI 與對應的 BFF 由同一個團隊負責)
在 2018 年(甚至更早)就有一些團隊基於 Node.js 展開了 BFF 的探索和實踐,由前端模組的開發者負責完成對應的 BFF 層上的一些介面開發工作
有了 BFF 層,後端工程師能夠專注於業務領域,但對前端工程師提出了更高的要求:需要前端型全棧工程師,並且隨著 BFF 層的發展,要求越來越高(擴充套件性、穩定性等)
FaaS 的出現很好地解決了這個問題,BFF 概念升級為 SFF(Serverless For Frontend),將專業性要求較高的後端服務框架部分封裝到了 FaaS 解決方案中,將 BFF 中業務邏輯之外的可用性保障工作從前端工程師轉交給了雲供應商的後端領域專家,彼此更加專業高效
SSR
SSR(Server-Side Rendering)(服務端渲染)同樣不是什麼新奇的概念:
在服務端生成完整的 HTML 頁面
省去了客戶端二次請求資料的網路開銷,以及渲染檢視模板的效能負擔,有助於加速首屏載入。但 SSR 也面臨著與 BFF 類似的問題,起一個 Demo 級的 SSR 渲染服務不難,而要上線一個高可用的 SSR 渲染引擎絕非易事
FaaS 讓服務的高可用要求變得觸手可及,無狀態的模板渲染工作尤其適合用雲函式來完成
P.S.社群已經出現了一些 Serverless Side Rendering 方案,如ykfe/ssr
端雲一體化開發
即前後端一體化開發,在單一專案中,既能完成前端展現需求,也能搞定資料服務
與之前 PHP、Java Web 整站開發有什麼區別?兜兜轉轉又回到了起點麼?
顯然不是,主要區別在於:
-
前後端分層解耦:前後端一體,但並不過分耦合
-
以前端專案為主體:不像 PHP、Java Web 以後端部分為主體
-
不僅限於 Web,在移動端同樣適用
一體化體現在:
-
一套基於雲 IDE 的開發/除錯環境,無縫的開發體驗
-
專注前端部分,(幾乎)不用關心後端服務的部署、運維
P.S.目前也出現了 FaaS+React/Vue 的一體化開發框架,如midwayjs/midway
四.未來的可能性
面向未來,FaaS 還可能會帶來這些變化:
-
面向小客戶的免費/廉價方案越來越多:例如小程式雲、IoT 開發套餐等
-
基於 FaaS 的 Web 服務框架與傳統 Web 服務框架趨於統一:基於傳統 Web 服務框架的應用能夠低成本遷移過來
-
SSR、CSR/NSR 等不同的前端渲染方式成為 Web 前端框架的配置選項:能夠在不同渲染模式之間靈活切換、甚至混用
-
前端進入全雲研發模式:FaaS 的普及和 BaaS 生態的成熟,加速 SSR、BFF 的流行,將前端開發從本地環境拉上雲端
你,準備好了嗎?
&n