李莎莎


摘要:最近關于Serverless的研究逐步升溫,Serverless將對前端開發模式產生變革性的影響。該文主要從前端開發模式的演進、ServerZess的優點和缺點以及Serverless設計思路等方面,探討Serverless中的前端開發模式。
關鍵詞:Serverless;前端開發;設計思路
中圖分類號:TP3 文獻標識碼:A
文章編號:1009-3044(2019)29-0240-02
1概述
回顧前端開發模式的演進,主要有四個階段:(1)基于模板渲染的動態頁面;(2)基于AJAX的前后端分離;(3)基于Node.js的前端工程化;(4)基于Node.is的全棧開發。每一次前端開發模式的變化,都因某個變革性的技術而起。先是AJAX,而后是Node.js。那么下一個變革性的技術是什么?不言而喻,就是Serverless。最近半年Serverless這個詞匯以及其引發的熱烈的討論,Serverless可能會是接下來引起前端領域革命性變化的技術之一。Serverless是一種“無服務器架構”,允許用戶專注于業務邏輯,而無需擔心程序的運行環境,資源和數量。對業務前端開發人員而言,Serverless會改變前后端接口定義規范;將改變前端聯合模式,讓前端參與服務器邏輯開發;顯著降低Nodejs服務器維護閾值,只要您編寫Js代碼來維護Node服務而無須學習Devops。對于免費的開發人員,未來的服務器部署更靈活,更具成本效益;部署更快,更不容易出錯。
前端框架總是帶來后端思維,而Serverless則為前端操作和維護帶來了前端思維。前端開發人員不需要擁有自己的服務,甚至不需要自己的瀏覽器,他們可以在每個用戶的計算機上均勻地運行JS代碼并進行負載均衡。從技術角度來說,Serverless就是FaaS和BaaS的結合。Serverless=FaaS+BaaS。FAAS(作為服務)+BAAS(后臺即服務)可以稱為無服務器的完整實現,如圖1所示。除此之外,還有PASS(平臺即服務)的概念。通常,平臺環境由容器技術實現,最終實現NoOps(無管理),或至少Devops(開發操作和維護)。
2Serverless的優點及缺點
2.1Serverless主要優點
Serverless架構的優點如下:
(1)降低運營成本。Serverless是非常簡單的外包解決方案。它允許您委托服務提供商來管理服務器,數據庫,應用程序甚至邏輯,或者您必須自己維護它。由于該服務的用戶數量將非常大,因此將具有規模經濟。降低成本有兩個方面,即基礎設施成本和人員成本(運營/開發)。
(2)降低開發成本。成功的無服務器服務提供商應該能夠提供一系列補充服務。這意味著您只需要在配置文件中記下數據庫的名稱,然后我們的數據將存儲在相應的數據庫中。即使一個服務提供者提供了一系列功能計算模板,那么我們只需要編寫我們的配置。這一系列事情可以自動有效地完成。
(3)擴展能力。Serverless架構一個顯而易見的優點即“水平擴展是完全自動的,彈性的,并由服務提供商管理”。受益于基礎架構的最大好處是,您只需支付所需的計算能力。
(4)更簡單的管理。Servefless架構明顯比其他架構更簡單。更少的組件意味著更少的管理開銷。
(5)實現快速上線。對于Web項目,啟動項目需要一系列”hello,world”。無服務器部署的優勢使其易于上線。
(6)“綠色”的計算。據“福布斯”雜志報道,商業和企業數據中心的典型服務器僅提供平均最大處理能力輸出的5%至15%。這無疑是一種資源的巨大浪費。隨著無服務器架構的出現,服務提供商能夠提供我們的計算能力,以最大限度地滿足實時需求;這將使我們能夠更有效地利用計算資源。
2.2Serverless主要缺點
作為在運行時啟動的應用程序,Serverless也有一個我們需要的問題。
(1)不適合長時間運行應用。Serverless在請求到來時才運行。這意味著當應用程序未運行時,它將進入“休眠狀態”,并且下次請求到來時,應用程序將需要一個啟動時間,即冷啟動。這個時候,可以結合CRON的方式或者CloudWatch來定期喚醒應用。如果您的應用程序需要長時間不間斷運行并處理大量請求,那么您可能無法采用無服務器架構。
(2)完全依賴于第三方服務。當您決定使用云服務時,您只能在無服務器上放置不重要的API。當您擁有大量基礎架構時,無服務器并不是一件好事。使用無服務器架構時,它與特殊服務提供商捆綁在一起。服務遷移變得困難。
(3)冷啟動時間。無服務器應用程序的冷啟動時間存在問題,盡管這種冷啟動時間在大多數情況下可以在50ms內。對于帶有Node.js應用程序虛擬機的Java和C#,這可能不是那么幸運。
(4))缺乏調試和開發工具。當使用Serverless Framework的時候,遇到了這樣的問題:缺乏調試和開發工具。每次調試都需要反復上傳代碼。每次上傳似乎都在部署服務器。
(5)構建復雜:Serverless便宜并不意味著簡單。無服務器框架的配置比普通的Lambda配置稍微復雜一些。但是真正的應用場景遠比這復雜。
(6)語言版本落后。在Node.js 6出來的時候,AWS Lambda只支持Node.js 4-3.2;在Node.js 9.0出來的時候,AWS Lambda支持到6.10.3。對于Java和Pvthon來說,他們的版本上可能基本都是夠用的,我不知道C#怎么樣。但是Node.js的版本顯然是有點老舊的,但是都Node js 9.2.0了。
2.3Serverless給后臺帶來的好處
未來后端開發的經驗可能類似于前端:您無須關心運行代碼的服務器,您不需要關心服務器環境,不必擔心負載平衡,并且可以隨時調用中間件服務。盡管前后端共享代碼不止有Serverless才能做到。但是,無服務器基于功能粒度的功能更符合前后多路復用代碼的概念。雖然這不是一項新發明,但它足以被稱為一項偉大的變革。對于前端開發人員,您會發現后臺服務很簡單。對于后端開發人員來說,發現服務更厚,面臨更多挑戰。
無服務器為后端帶來的好處遠遠超過了挑戰:
(1)推進前后端一體化。進一步降低Node編寫服務器代碼的門檻,消除了應用程序操作的學習成本。
(2)提高資源利用效率。消除獨占資源的應用,切換到按需加載將不可避免地減少不必要的資源消耗,并將服務分散到集群中的每臺機器以平衡集群的CPU水位。
(3)降低云平臺使用門檻。無操作和維護,靈活擴展,基于價值的服務和高可用性。
3Serverless設計思路
3.1利用Serverless嘗試服務開放
現在的挑戰之一是后端功能是開放的,因為當您具有提取功能的自定義要求時,您可能需要自定義后端數據處理的邏輯。你現在可以做的是使用maven3和jdk7來構建本地開發環境測試。如果后端構建獨特的無服務器BAAS服務,您可以執行在線編碼,調試甚至灰度發布,以便像前端組件一樣進行預測試?,F在前端云開發有很多成熟的探索。
3.2Serverless應用架構設計
根據市面上流行的無服務器應用程序架構圖并總結了一個通用的無服務器架構,如圖2所示。
底層是實現復雜服務的后端微服務(Backend)。然后,FaaS層通過一系列功能實現業務邏輯,并為前端提供直接服務。對于前端開發人員,前端可以通過編寫函數來實現服務器的邏輯。對于后端開發者來說,后端變得更靠后了。如果業務相對簡單,可以實現FaaS層,甚至不需要微服務層。同時,無論是后端還是前端,我們都可以調用云計算平臺提供的BaaS服務,大大降低了開發難度,降低了開發成本。小程序云開發是直接在前端調用BaaS服務的一個示例。
4總結
現在的前端開發不再是過去的前端開發,前端不僅可以做網頁,還可以做小程序,做APP,做桌面程序,甚至做服務器。前端不斷擴大其邊界并不斷探索更多領域的原因是希望它能夠產生更大的價值。最好用熟悉的工具和熟悉的方法創造價值。無服務器架構的誕生將幫助前端工程師實現理想的最大化。使用Serverless,您無需過多關注服務器的操作和維護。我們需要關注的事情越來越少,但我們可以做得更多。在未來,Serverless平臺還可以在如下方向進行發展:添加更多語言,改進基于Web的IDE的功能,配置更多技能,并整合自動化測試系統。無服務器也將對前端開發模型做出巨大改變,前端工程師的功能將回歸應用工程師的功能。