FaaS 給前端帶來了什麼?
- 2020 年 7 月 22 日
- 筆記
- Programming
一.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 獲取天氣、環境指數
同樣提供了面向小客戶(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 的流行,將前端開發從本地環境拉上雲端
你,準備好了嗎?