Serverless 是一種雲計算理念,即無服務器計算(Serverless Computing):html
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 的關鍵:git
Serverless 的核心是 FaaS(Function as a Service),但云平臺一般還提供 Serverless 框架來知足 BaaS (Backend as a Service)等特定應用程序要求。所以,能夠簡單理解爲:Serverless computing = FaaS + BaaSgithub
由雲函數(Cloud functions)提供常規計算,輔以特定的 BaaS 產品生態(好比對象存儲、數據庫、消息機制等),用戶專一實現其函數邏輯,極大地簡化了雲編程數據庫
聽起來彷佛有些玄幻,不知哪年可以成爲現實,事實上,時至今日(2020/7/5)市面上已經有許多相對成熟的 FaaS 產品了編程
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.
主要應用場景包括:前端框架
還提供了小客戶免費試玩套餐:
阿里雲也提供了 FaaS 方案,叫作函數計算:
函數計算 - 阿里雲函數計算是事件驅動的全託管計算服務。經過函數計算,您無需管理服務器等基礎設施,只需編寫代碼並上傳。函數計算會爲您準備好計算資源,以彈性、可靠的方式運行您的代碼,並提供日誌查詢、性能監控、報警等功能。藉助於函數計算,您能夠快速構建任何類型的應用和服務,無需管理和運維。並且,您只須要爲代碼實際運行所消耗的資源付費,代碼未運行則不產生費用。
應用場景以下:
一樣提供了面向小客戶(1-10 人團隊)的免費套餐:
但免費額度不太透明,而且不排除往後收取費用的可能
P.S.另外,阿里雲提供的OSS 彷佛沒有免費額度,試玩需注意
騰訊雲提供的 FaaS 產品是SCF(Serverless Cloud Function):
雲函數 SCF - 雲函數(Serverless Cloud Function,SCF)是騰訊云爲企業和開發者們提供的無服務器執行環境,幫助您在無需購買和管理服務器的狀況下運行代碼。您只需使用平臺支持的語言編寫核心代碼並設置代碼運行的條件,便可在騰訊雲基礎設施上彈性、安全地運行代碼。SCF 是實時文件處理和數據處理等場景下理想的計算平臺。
主推的 4 大應用場景:
有了 FaaS,意味着可以:
直接運行後端代碼,而無需考慮服務器等計算資源以及服務的擴展性、穩定性等問題,甚至連日誌、監控、報警等配套設施也都開箱即用
也就是說,上線一個簡單的後端服務(好比接口聚合、數據編排),再也不須要經驗豐富的專業後端工程師幫忙:
咱們只須要提供一段代碼,由雲供應商精心研製的 FaaS 方案幫咱們選擇該編程語言對應的技術棧最佳實踐,基於內置的擴展機制按實際須要動態擴展計算資源,輕鬆部署服務到公網,並提供可靠的監控、報警保障
餵給 FaaS 一個函數,就能上線一個高可用的服務。(簡單)服務接口開發的專業性要求下降了,前端有了更大的發揮空間,包括但不限於:
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(Server-Side Rendering)(服務端渲染)一樣不是什麼新奇的概念:
在服務端生成完整的 HTML 頁面
省去了客戶端二次請求數據的網絡開銷,以及渲染視圖模板的性能負擔,有助於加速首屏加載。但 SSR 也面臨着與 BFF 相似的問題,起一個 Demo 級的 SSR 渲染服務不難,而要上線一個高可用的 SSR 渲染引擎絕非易事
FaaS 讓服務的高可用要求變得觸手可及,無狀態的模板渲染工做尤爲適合用雲函數來完成
P.S.社區已經出現了一些 Serverless Side Rendering 方案,如ykfe/ssr
即先後端一體化開發,在單一項目中,既能完成前端展示需求,也能搞定數據服務
與以前 PHP、Java Web 整站開發有什麼區別?兜兜轉轉又回到了起點麼?
顯然不是,主要區別在於:
一體化體如今:
P.S.目前也出現了 FaaS+React/Vue 的一體化開發框架,如midwayjs/midway
面向將來,FaaS 還可能會帶來這些變化:
你,準備好了嗎?
關注「前端向後」微信公衆號,你將收穫一系列「用心原創」的高質量技術文章,主題包括但不限於前端、Node.js以及服務端技術
本文首發於 ayqy.net ,原文連接:http://www.ayqy.net/blog/faas...