讓應(yīng)用程序準(zhǔn)備好無服務(wù)器平臺的三個(gè)方法
譯文【51CTO.com快譯】與在更傳統(tǒng)的PaaS或IaaS環(huán)境中運(yùn)行的應(yīng)用程序相比,無服務(wù)器平臺上的應(yīng)用程序在性能、存儲及更多方面提出了獨(dú)特的要求。
包括AWS、微軟和谷歌在內(nèi)的各大云供應(yīng)商都推出了無服務(wù)器平臺,讓用戶能夠借助一系列函數(shù)(function),將簡單或者甚至高度復(fù)雜的應(yīng)用程序組合起來。但是要在這種平臺上成功地運(yùn)行云應(yīng)用程序,開發(fā)團(tuán)隊(duì)就要改進(jìn)設(shè)計(jì)流程。
開發(fā)人員在構(gòu)建無服務(wù)器應(yīng)用程序時(shí),應(yīng)遵循的幾個(gè)關(guān)鍵原則包括如下:
- 開發(fā)小而獨(dú)立的應(yīng)用程序組件。
- 實(shí)施無狀態(tài)函數(shù)。
- 規(guī)劃壽命短的臨時(shí)函數(shù)。
1. 更小而獨(dú)立的組件
本質(zhì)上,無服務(wù)器函數(shù)旨在執(zhí)行單一任務(wù)。這要求開發(fā)團(tuán)隊(duì)確保函數(shù)小巧,并圍繞這些獨(dú)立的應(yīng)用程序組件協(xié)調(diào)開發(fā)流程。
一個(gè)好的做法是,基于觸發(fā)函數(shù)的事件類型,將函數(shù)分解成各自的函數(shù)庫。基本上,開發(fā)者應(yīng)該一開始就設(shè)計(jì)每個(gè)函數(shù),以響應(yīng)一個(gè)事件。如果同一個(gè)事件觸發(fā)多個(gè)函數(shù),將它們包含在同一個(gè)函數(shù)庫中。這樣一來,開發(fā)人員就比較容易基于觸發(fā)函數(shù)的事件來識別函數(shù)。
每個(gè)單獨(dú)的函數(shù)還應(yīng)包括配置數(shù)據(jù),以確保函數(shù)在開發(fā)、測試和生產(chǎn)環(huán)境中啟動時(shí)具有一致性。使用npm和webpack等工具來聲明和隔離每個(gè)函數(shù)內(nèi)的依賴項(xiàng)也很重要。
2. 選擇無狀態(tài)
開發(fā)團(tuán)隊(duì)?wèi)?yīng)考慮將函數(shù)實(shí)施成無狀態(tài)服務(wù),其中函數(shù)的狀態(tài)存儲在應(yīng)用程序本身之外。你可以配置函數(shù),以便引用作為配置數(shù)據(jù)的一部分加以管理,并與存儲庫中的函數(shù)一起存儲的數(shù)據(jù)存儲區(qū)和數(shù)據(jù)庫。
一些無服務(wù)器平臺提供了在函數(shù)調(diào)用之間持續(xù)存在的本地存儲。雖然開發(fā)人員可能忍不住將此用于更復(fù)雜的函數(shù),但該本地存儲并不總是在函數(shù)調(diào)用之間持續(xù)存在;就算持續(xù)存在,也可能不一致。
盡量使用支持性服務(wù),將有狀態(tài)數(shù)據(jù)存儲在數(shù)據(jù)庫、單獨(dú)的存儲數(shù)據(jù)區(qū)或緩存中。支持性服務(wù)是指函數(shù)在網(wǎng)絡(luò)上作為正常操作的一部分而使用的任何外部服務(wù),包括緩存服務(wù)(比如Memcached)、數(shù)據(jù)存儲區(qū)(比如CouchDB)或數(shù)據(jù)庫(比如MySQL)。
3. 規(guī)劃臨時(shí)性
無服務(wù)器函數(shù)的好處之一是它們可以在幾毫秒內(nèi)啟動,相比之下,在PaaS、容器和虛擬機(jī)上運(yùn)行的大型應(yīng)用程序需要幾秒鐘甚至幾分鐘,并可以同樣迅速地停止運(yùn)行。因而很容易增加大量函數(shù)以應(yīng)對需求,或讓并行運(yùn)行的函數(shù)共同完成計(jì)算任務(wù),然后一旦計(jì)算完畢,讓它們又停止運(yùn)行。
實(shí)際上,無服務(wù)器應(yīng)用程序本質(zhì)上具有更強(qiáng)的臨時(shí)性。
這意味著,想充分獲得無服務(wù)器平臺的好處,開發(fā)人員就需要從函數(shù)的核心邏輯中刪除通常與應(yīng)用程序綁定的許多組件。開發(fā)人員應(yīng)該:
- 預(yù)熱函數(shù)所需的數(shù)據(jù)源;
- 搭建外部記錄和跟蹤基礎(chǔ)架構(gòu);以及
- 管理安全。
預(yù)熱
為了預(yù)熱函數(shù),你需要在部署之前搭建函數(shù)與數(shù)據(jù)庫進(jìn)行聯(lián)系所需的基礎(chǔ)架構(gòu)。
為此,將函數(shù)處理程序與核心邏輯分開來。就像在寒冷天氣讓汽車空轉(zhuǎn)以改善其性能,閑置事件處理程序可確保:一旦該函數(shù)調(diào)用,就能以最佳性能運(yùn)行。AWS CloudFormation和Azure Event Hubs之類的工具支持預(yù)熱過程。
外部記錄和跟蹤
函數(shù)需要能夠快速優(yōu)雅地關(guān)閉。雖然無服務(wù)器平臺包含一些內(nèi)置的本地存儲,但配置外部日志記錄和跟蹤服務(wù)(這種服務(wù)內(nèi)置于無服務(wù)器框架本身),或者設(shè)置自定義工具,以便函數(shù)運(yùn)行時(shí),收集和存儲來自函數(shù)的日志數(shù)據(jù),這很重要。
AWS X-Ray和Azure Application Insights之類的工具有助于日志記錄和跟蹤。
安全
無服務(wù)器應(yīng)用程序給黑客帶來了另一條潛在的攻擊途徑。如果未落實(shí)適當(dāng)?shù)陌踩胧?,黑客很可能會啟用函?shù),訪問敏感數(shù)據(jù)。開發(fā)人員應(yīng)為各類函數(shù)做好安全設(shè)置,以便對執(zhí)行某項(xiàng)任務(wù)所需要的其他應(yīng)用程序只能進(jìn)行最低限度的訪問。
原文標(biāo)題:Three ways to prepare applications for serverless platforms,作者:George Lawton
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】