無服務(wù)器架構(gòu)的發(fā)展與應(yīng)用
無服務(wù)器架構(gòu),通常被稱為“無服務(wù)器計(jì)算”,但并不像其名稱所暗示的那樣完全沒有服務(wù)器。無服務(wù)器架構(gòu)是一種基于應(yīng)用的云計(jì)算服務(wù),其中由云計(jì)算提供商管理服務(wù)器,提供更高的效率和潛在的成本節(jié)約。對于大多數(shù)云計(jì)算用戶來說,這更容易和有效。
無服務(wù)器也稱為功能即服務(wù)(FaaS),無需存儲數(shù)據(jù)即可執(zhí)行應(yīng)用程序邏輯。利用FaaS的開發(fā)人員仍然需要編寫服務(wù)器端邏輯,但它運(yùn)行在短暫的無狀態(tài)容器中??蛻舳藨?yīng)用程序(包括移動應(yīng)用程序)可利用基于云計(jì)算的基礎(chǔ)設(shè)施后端即服務(wù)(BaaS)。
“無服務(wù)器”一詞的使用可以追溯到2012年。而AWS公司在2014年推出了Lambda(公共云供應(yīng)商提供的第一個無服務(wù)器計(jì)算產(chǎn)品),加速了該術(shù)語的主流使用。2016年,谷歌云推出Google Cloud Functions,Microsoft Azure推出了Azure Functions,IBM Cloud推出了IBM Functions,而OpenWhisk開源項(xiàng)目則首次亮相。
無服務(wù)器有時會與云計(jì)算的平臺即服務(wù)(PaaS)混淆。后端即服務(wù)(BaaS)和功能即服務(wù)(FaaS)都是云計(jì)算提供商提供的服務(wù)選項(xiàng),但功能即服務(wù)(FaaS)在幾個重要方面與平臺即服務(wù)(PaaS)不同。例如,功能即服務(wù)(FaaS)會自動擴(kuò)展,但平臺即服務(wù)(PaaS)則不能。此外,功能即服務(wù)(FaaS)可以使整個應(yīng)用程序上下移動,而平臺即服務(wù)(PaaS)并沒有這樣的專門設(shè)計(jì)。
無服務(wù)器架構(gòu)使用了大量的應(yīng)用程序粒度;它適用于當(dāng)今的微服務(wù)世界,而不是早期的單片架構(gòu)。
無服務(wù)器示例
- 照片應(yīng)用的用戶可以在選擇照片時自動調(diào)整大小。照片將發(fā)送到Amazon S3存儲桶,該存儲桶使用無服務(wù)器來觸發(fā)相應(yīng)的Lambda功能。其輸出是用戶選擇的照片大小。
- 應(yīng)用內(nèi)游戲開發(fā)者希望能夠使其購買變得不再繁瑣,因?yàn)閼?yīng)用評論受到了影響。玩家現(xiàn)在可以將鼠標(biāo)懸停在他們想要購買的產(chǎn)品上。例如玩家將鼠標(biāo)懸停在“Neo太陽鏡”上,通過API網(wǎng)關(guān)觸發(fā)虛擬產(chǎn)品和購買功能。每個無服務(wù)器功能都使用一個數(shù)據(jù)庫。幾秒鐘之內(nèi),所選的角色就戴上了太陽鏡,因?yàn)楝F(xiàn)在角色就擁有太陽鏡,它可能會被隨意移除或重新戴上。
無服務(wù)器用例
- Web應(yīng)用程序
- 異步消息處理。例如,應(yīng)用程序的用戶界面(UI)響應(yīng)時間和準(zhǔn)確的交易歷史記錄都很重要
- 需要自動擴(kuò)展功能的聊天機(jī)器人
- 大規(guī)模流處理
- 移動應(yīng)用程序后端
- 批處理作業(yè)
- 多媒體處理
- 數(shù)據(jù)處理
- 聊天機(jī)器人和虛擬助理
- IT自動化
無服務(wù)器的好處
- 減少開銷。應(yīng)用程序可以在沒有使用功能即服務(wù)(FaaS)的服務(wù)器的情況下運(yùn)行,因此無需配置或管理服務(wù)器。
- 自動縮放。功能即服務(wù)(FaaS)自動縮放,向上或向下擴(kuò)展,因此客戶無需為閑置容量支付費(fèi)用。
- 高可用性。應(yīng)用程序可用性不是問題,因?yàn)楣δ芗捶?wù)(FaaS)和后端即服務(wù)(BaaS)可用性不是問題。
- 選擇。功能即服務(wù)(FaaS)允許開發(fā)人員使用流行語言和庫。
- 成本。與平臺即服務(wù)(PaaS)和基礎(chǔ)設(shè)施即服務(wù)(IaaS)一樣,無服務(wù)器云計(jì)算提供商擁有硬件和軟件元素。服務(wù)器管理成本也是外包的。
- 簡單。部署功能即服務(wù)(FaaS)功能就像上傳代碼一樣簡單;部署服務(wù)器涉及腳本和面向資源的決策。
- 速度。由于無服務(wù)器無需服務(wù)器及其管理,因此節(jié)省了寶貴的IT時間。它還加速了實(shí)驗(yàn)和原型設(shè)計(jì)。
無服務(wù)器的缺點(diǎn)
- 無狀態(tài)與狀態(tài)。對于使用面向狀態(tài)功能的應(yīng)用程序體系結(jié)構(gòu)來說,功能即服務(wù)(FaaS)的無狀態(tài)性質(zhì)可能是一個問題。
- 超時。如果應(yīng)用程序包含超出超時限制的任務(wù),功能即服務(wù)(FaaS)超時可能會影響應(yīng)用程序體系結(jié)構(gòu)。
- 啟動延遲。功能即服務(wù)(FaaS)啟動延遲可能會排除極其敏感的用例,例如算法交易。
- 服務(wù)水平協(xié)議。缺乏服務(wù)等級教育協(xié)議(SLA)一直是個問題。在2018年10月,AWS公司宣布Lambda的每月正常運(yùn)行時間為99.95%。
- 功能配置。配置功能即服務(wù)(FaaS)的能力可能有限。
- 并發(fā)限制。允許的并發(fā)功能即服務(wù)(FaaS)功能的數(shù)量是有限的。如果由于同時進(jìn)行測試和生產(chǎn),共享企業(yè)帳戶,跨多個云服務(wù)的帳戶超出該數(shù)量,則生產(chǎn)應(yīng)用程序性能可能會受到影響。
- 功能即服務(wù)(FaaS)監(jiān)控。這里的兩個問題是供應(yīng)商提供了多少數(shù)據(jù),以及監(jiān)控臨時容器的一般困難。
- 供應(yīng)商鎖定。云計(jì)算提供商希望難以轉(zhuǎn)移到其他提供商。有兩種方法可以使平臺特有的工具和設(shè)計(jì)功能不同。
- 控制。供應(yīng)商可以完全控制基礎(chǔ)設(shè)施、定價和功能。
- 成本。無服務(wù)器并不總是比其他選項(xiàng)便宜,因此理解與其他選項(xiàng)相比的成本/收益權(quán)衡是明智的。使用功能即服務(wù)(FaaS),功能在調(diào)用之前不需要任何費(fèi)用。
無服務(wù)器的安全性
- 攻擊面擴(kuò)大。生態(tài)系統(tǒng)中的任何新元素都會增加潛在的破壞機(jī)會。此外,與使用傳統(tǒng)架構(gòu)的應(yīng)用程序相比,無服務(wù)器應(yīng)用程序具有更多的組件。每個組件都是應(yīng)用程序的唯一入口點(diǎn)。
- 功能許可。有時,當(dāng)權(quán)限越窄越明智時,廣泛的權(quán)限可能會應(yīng)用于一系列功能。
- 多租戶。其他客戶不應(yīng)該看到企業(yè)數(shù)據(jù),但可能是這樣。這是主要提供商主動解決的一般云計(jì)算問題。
- 第三方軟件依賴性。功能可能依賴于已泄露的第三方軟件。
無服務(wù)器架構(gòu)入門
開始使用無服務(wù)器架構(gòu)的適合方法是完全理解文中的所有內(nèi)容:它是什么,它的優(yōu)點(diǎn)和缺點(diǎn)是什么,因此可以定義適當(dāng)?shù)挠美?/p>
具體來說,如果要將無服務(wù)器應(yīng)用程序添加到現(xiàn)有應(yīng)用程序或構(gòu)建新的無服務(wù)器應(yīng)用程序,需要考慮以下內(nèi)容:
- 了解無服務(wù)器是什么或不是什么。
- 了解使用傳統(tǒng)架構(gòu)應(yīng)用程序和無服務(wù)器應(yīng)用程序之間的權(quán)衡。
- 確定企業(yè)是要構(gòu)建無服務(wù)器應(yīng)用程序還是修改現(xiàn)有應(yīng)用程序以利用后端即服務(wù)(BaaS)、功能即服務(wù)(FaaS)或兩者兼而有之。
- 選擇一個提供者(可能是企業(yè)使用過的提供者)。
假設(shè)企業(yè)選擇了AWS Lambda,這是一種特別受歡迎的無服務(wù)器解決方案:
- 設(shè)置Lambda功能(內(nèi)存和存儲要求、觸發(fā)器、訪問)。
- 設(shè)置Amazon API網(wǎng)關(guān)。
- 要適應(yīng)現(xiàn)有應(yīng)用程序,請使用AWS步驟功能進(jìn)行工作流管理。
- 通過Amazon身份訪問管理和Cognito服務(wù)設(shè)置訪問和安全。
- 對于日志記錄和監(jiān)控,使用AWS Cloudwatch和X-Ray。
- 如果需要本地應(yīng)用程序測試,請使用AWS無服務(wù)器應(yīng)用程序模型。
- 滿足合規(guī)要求。
- 將無服務(wù)器架構(gòu)模式與同一類型應(yīng)用程序的常見模式進(jìn)行比較。
如何管理無服務(wù)器架構(gòu)
顧名思義,在無服務(wù)器云服務(wù)的情況下,IT不管理服務(wù)器。對于本地功能即服務(wù)(FaaS)實(shí)施(例如由Apache OpenWhisk、Kubeless和OpenFaaS啟用的實(shí)施),服務(wù)器在內(nèi)部進(jìn)行管理。
雖然基于應(yīng)用的云計(jì)算優(yōu)勢不適用于本地功能即服務(wù)(FaaS)實(shí)施,但可以實(shí)現(xiàn)更高的服務(wù)器利用率,開發(fā)人員仍然可以從無服務(wù)器提供的抽象中受益。
但是,仍有一些操作問題需要考慮,例如權(quán)限、安全性、依賴性和其他問題,這取決于應(yīng)用程序的設(shè)計(jì),這些問題不會消失。
關(guān)鍵問題是:企業(yè)是否擁有管理無服務(wù)器所需的內(nèi)部專業(yè)知識?直到現(xiàn)在,無服務(wù)器仍然是一項(xiàng)新興技術(shù),因此不要假設(shè)企業(yè)的內(nèi)部人員或開發(fā)人員是專家。
無服務(wù)器計(jì)算的未來
隨著無服務(wù)器選項(xiàng)越來越受歡迎,以下內(nèi)容可能會展開:
- 更多更好的工具。這是一個市場成熟度問題,它也是受歡迎程度與其他選項(xiàng)的功能。無服務(wù)器變得越流行,工具和開源項(xiàng)目就越多。
- 優(yōu)秀實(shí)踐。由于無服務(wù)器是一個相對較新的概念,目前還沒有很多優(yōu)秀實(shí)踐,但是無服務(wù)器架構(gòu)模式可用于上述許多用例。
- 無服務(wù)器優(yōu)先應(yīng)用程序。在某些用例中,可能會出現(xiàn)更多的無服務(wù)器應(yīng)用程序,而不是通過修改應(yīng)用程序來利用無服務(wù)器選項(xiàng)。
- 框架。將出現(xiàn)額外的框架,使其更容易與一個供應(yīng)商而不是另一個供應(yīng)商合作。目前的例子是Fn Project,它是一個容器本地開源框架和無服務(wù)器框架,可以將無服務(wù)器應(yīng)用程序部署到多個功能即服務(wù)(FaaS)提供程序。
- 私有功能即服務(wù)(FaaS)。功能即服務(wù)(FaaS)已經(jīng)可以在企業(yè)內(nèi)部實(shí)施。與云計(jì)算服務(wù)或混合云實(shí)施相比,時間會證明這將成為主流。