【推薦】FaaS 給前端帶來了什么?

關(guān)注「前端向后」微信公眾號,你將收獲一系列「用心原創(chuàng)」的高質(zhì)量技術(shù)文章,主題包括但不限于前端、Node.js以及服務(wù)端技術(shù)
一.Serverless 與 FaaS
Serverless 是一種云計算理念,即無服務(wù)器計算(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.
將服務(wù)器相關(guān)的配置管理工作統(tǒng)統(tǒng)交給云供應(yīng)商去做,用戶不必花很大精力去管理 Server(或云資源),所以稱之為 Serverless
而 FaaS(Function as a Service)則是 Serverless 的關(guān)鍵:
Serverless 的核心是 FaaS(Function as a Service),但云平臺通常還提供 Serverless 框架來滿足 BaaS (Backend as a Service)等特定應(yīng)用程序要求。因此,可以簡單理解為:
Serverless computing = FaaS + BaaS

由云函數(shù)(Cloud functions)提供常規(guī)計算,輔以特定的 BaaS 產(chǎn)品生態(tài)(比如對象存儲、數(shù)據(jù)庫、消息機制等),用戶專注實現(xiàn)其函數(shù)邏輯,極大地簡化了云編程
聽起來似乎有些玄幻,不知哪年能夠成為現(xiàn)實,事實上,時至今日(2020/7/5)市面上已經(jīng)有許多相對成熟的 FaaS 產(chǎn)品了
二.已經(jīng)面市的 FaaS 產(chǎn)品
AWS Lambda
Amazon 早在 2015 年就推出了 AWS Lambda 服務(wù):
AWS Lambda – Run code without thinking about servers. Pay only for the compute time you consume.
直接運行代碼,而無需考慮服務(wù)器(的管理和配置),按所使用的計算時間計費的云計算服務(wù)產(chǎn)品
也就是說,開發(fā)者只需要上傳代碼,Lambda 能夠自動處理代碼運行以及高可用性擴展所需的一切工作:
Just upload your code and Lambda takes care of everything required to run and scale your code with high availability.
主要應(yīng)用場景包括:
數(shù)據(jù)處理
實時文件處理:例如創(chuàng)建縮略圖、轉(zhuǎn)換視頻代碼、處理日志等
實時數(shù)據(jù)流處理:比如跟蹤用戶訪問指標(biāo)
機器學(xué)習(xí):在將數(shù)據(jù)輸入到機器學(xué)習(xí)模型之前對其進(jìn)行預(yù)處理
后端:處理 Web、移動、物聯(lián)網(wǎng) (IoT) 和第 3 方 API 請求
還提供了小客戶免費試玩套餐:
AWS 中國(寧夏)區(qū)域免費套餐:25GB 的 NoSQL 數(shù)據(jù)庫 + 每月 100 萬請求量的云函數(shù) 永久免費
AWS 海外區(qū)域賬戶免費套餐:相同配置,永久免費
阿里云 FC
阿里云也提供了 FaaS 方案,叫做函數(shù)計算:
函數(shù)計算 – 阿里云函數(shù)計算是事件驅(qū)動的全托管計算服務(wù)。通過函數(shù)計算,您無需管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫代碼并上傳。函數(shù)計算會為您準(zhǔn)備好計算資源,以彈性、可靠的方式運行您的代碼,并提供日志查詢、性能監(jiān)控、報警等功能。借助于函數(shù)計算,您可以快速構(gòu)建任何類型的應(yīng)用和服務(wù),無需管理和運維。而且,您只需要為代碼實際運行所消耗的資源付費,代碼未運行則不產(chǎn)生費用。
應(yīng)用場景如下:
低成本跨境文件傳輸:大規(guī)模的文件同步
文件處理:例如對上傳至 OSS 的文件進(jìn)行壓縮/解壓、轉(zhuǎn)碼、加水印等
前端 CI/CD 系統(tǒng):Webhook 通知觸發(fā)云函數(shù),將前端代碼庫上傳至 OSS,走 CDN 部署
日志 ETL 處理:加工、投遞數(shù)據(jù)
智能家電:智能家居、App 獲取天氣、環(huán)境指數(shù)
中小網(wǎng)站:例如基于函數(shù)計算 + wordpress 構(gòu)建 serverless 網(wǎng)站
同樣提供了面向小客戶(1-10 人團隊)的免費套餐:
免費云開發(fā)
但免費額度不太透明,并且不排除日后收取費用的可能
P.S.另外,阿里云提供的OSS 似乎沒有免費額度,試玩需注意
騰訊云 SCF
騰訊云提供的 FaaS 產(chǎn)品是SCF(Serverless Cloud Function):
云函數(shù) SCF – 云函數(shù)(Serverless Cloud Function,SCF)是騰訊云為企業(yè)和開發(fā)者們提供的無服務(wù)器執(zhí)行環(huán)境,幫助您在無需購買和管理服務(wù)器的情況下運行代碼。您只需使用平臺支持的語言編寫核心代碼并設(shè)置代碼運行的條件,即可在騰訊云基礎(chǔ)設(shè)施上彈性、安全地運行代碼。SCF 是實時文件處理和數(shù)據(jù)處理等場景下理想的計算平臺。
主推的 4 大應(yīng)用場景:
實時文件處理:例如音頻/視頻轉(zhuǎn)碼
數(shù)據(jù) ETL 處理:針對大數(shù)據(jù)集的并發(fā)分析處理(ETL 即典型的 Extract-Transform-Load 數(shù)據(jù)處理過程)
移動及 Web 應(yīng)用后端:以云函數(shù)的形式實現(xiàn)后端服務(wù)
AI 推理預(yù)測:AI 模型完成訓(xùn)練后,對外提供推理服務(wù)
說是每月有一定的免費額度,但外網(wǎng)出流量不免費,試玩需謹(jǐn)慎
三.FaaS 給前端帶來了什么?
有了 FaaS,意味著能夠:
直接運行后端代碼,而無需考慮服務(wù)器等計算資源以及服務(wù)的擴展性、穩(wěn)定性等問題,甚至連日志、監(jiān)控、報警等配套設(shè)施也都開箱即用
也就是說,上線一個簡單的后端服務(wù)(比如接口聚合、數(shù)據(jù)編排),不再需要經(jīng)驗豐富的專業(yè)后端工程師幫忙:
選擇技術(shù)棧
考慮高并發(fā)下的擴展機制
估算峰值流量,預(yù)配資源(申請機器)
走 CI/CD 流程
接入監(jiān)控、運維體系
我們只需要提供一段代碼,由云供應(yīng)商精心研制的 FaaS 方案幫我們選擇該編程語言對應(yīng)的技術(shù)棧最佳實踐,基于內(nèi)置的擴展機制按實際需要動態(tài)擴展計算資源,輕松部署服務(wù)到公網(wǎng),并提供可靠的監(jiān)控、報警保障
喂給 FaaS 一個函數(shù),就能上線一個高可用的服務(wù)。(簡單)服務(wù)接口開發(fā)的專業(yè)性要求降低了,前端有了更大的發(fā)揮空間,包括但不限于:
BFF(Backend For Frontend)
SSR(Server-Side Rendering)
端云一體化開發(fā)
BFF
Backend For Frontend (BFF)(用戶體驗適配層)的理念已經(jīng)不新鮮了:
給每種用戶體驗對應(yīng)一個后端(one backend per user experience)
也就是說:
BFF 是面向特定用戶體驗的,由實現(xiàn)這部分 UI 的前端團隊負(fù)責(zé)實現(xiàn)及維護(即 UI 與對應(yīng)的 BFF 由同一個團隊負(fù)責(zé))
在 2018 年(甚至更早)就有一些團隊基于 Node.js 展開了 BFF 的探索和實踐,由前端模塊的開發(fā)者負(fù)責(zé)完成對應(yīng)的 BFF 層上的一些接口開發(fā)工作
有了 BFF 層,后端工程師能夠?qū)W⒂跇I(yè)務(wù)領(lǐng)域,但對前端工程師提出了更高的要求:需要前端型全棧工程師,并且隨著 BFF 層的發(fā)展,要求越來越高(擴展性、穩(wěn)定性等)
FaaS 的出現(xiàn)很好地解決了這個問題,BFF 概念升級為 SFF(Serverless For Frontend),將專業(yè)性要求較高的后端服務(wù)框架部分封裝到了 FaaS 解決方案中,將 BFF 中業(yè)務(wù)邏輯之外的可用性保障工作從前端工程師轉(zhuǎn)交給了云供應(yīng)商的后端領(lǐng)域?qū)<遥舜烁訉I(yè)高效
SSR
SSR(Server-Side Rendering)(服務(wù)端渲染)同樣不是什么新奇的概念:
在服務(wù)端生成完整的 HTML 頁面
省去了客戶端二次請求數(shù)據(jù)的網(wǎng)絡(luò)開銷,以及渲染視圖模板的性能負(fù)擔(dān),有助于加速首屏加載。但 SSR 也面臨著與 BFF 類似的問題,起一個 Demo 級的 SSR 渲染服務(wù)不難,而要上線一個高可用的 SSR 渲染引擎絕非易事
FaaS 讓服務(wù)的高可用要求變得觸手可及,無狀態(tài)的模板渲染工作尤其適合用云函數(shù)來完成
P.S.社區(qū)已經(jīng)出現(xiàn)了一些 Serverless Side Rendering 方案,如ykfe/ssr
端云一體化開發(fā)
即前后端一體化開發(fā),在單一項目中,既能完成前端展現(xiàn)需求,也能搞定數(shù)據(jù)服務(wù)
與之前 PHP、Java Web 整站開發(fā)有什么區(qū)別?兜兜轉(zhuǎn)轉(zhuǎn)又回到了起點么?
顯然不是,主要區(qū)別在于:
前后端分層解耦:前后端一體,但并不過分耦合
以前端項目為主體:不像 PHP、Java Web 以后端部分為主體
不僅限于 Web,在移動端同樣適用
一體化體現(xiàn)在:
一套基于云 IDE 的開發(fā)/調(diào)試環(huán)境,無縫的開發(fā)體驗
專注前端部分,(幾乎)不用關(guān)心后端服務(wù)的部署、運維
P.S.目前也出現(xiàn)了 FaaS+React/Vue 的一體化開發(fā)框架,如midwayjs/midway
四.未來的可能性
面向未來,F(xiàn)aaS 還可能會帶來這些變化:
面向小客戶的免費/廉價方案越來越多:例如小程序云、IoT 開發(fā)套餐等
基于 FaaS 的 Web 服務(wù)框架與傳統(tǒng) Web 服務(wù)框架趨于統(tǒng)一:基于傳統(tǒng) Web 服務(wù)框架的應(yīng)用能夠低成本遷移過來
SSR、CSR/NSR 等不同的前端渲染方式成為 Web 前端框架的配置選項:能夠在不同渲染模式之間靈活切換、甚至混用
前端進(jìn)入全云研發(fā)模式:FaaS 的普及和 BaaS 生態(tài)的成熟,加速 SSR、BFF 的流行,將前端開發(fā)從本地環(huán)境拉上云端
你,準(zhǔn)備好了嗎?
推薦閱讀
我的公眾號能帶來什么價值?(文末有送書規(guī)則,一定要看)
每個前端工程師都應(yīng)該了解的圖片知識(長文建議收藏)
為什么現(xiàn)在面試總是面試造火箭?
