防止AWS Lambda冷啟動(dòng)的5種方法
AWS Lambda為開(kāi)發(fā)人員提供了許多好處,包括可伸縮性,靈活性,更快的發(fā)布時(shí)間和降低的成本。但是,也有一些限制,例如冷啟動(dòng)。冷啟動(dòng)會(huì)增加無(wú)服務(wù)器應(yīng)用程序的延遲。繼續(xù)閱讀以發(fā)現(xiàn)一些改善AWS Lambda性能的技巧。
AWS Lambda如何工作?
Lambda函數(shù)在自己的容器上運(yùn)行。創(chuàng)建新函數(shù)時(shí),Lambda會(huì)將其打包到新容器中。然后,在受管計(jì)算機(jī)的多租戶群集上執(zhí)行此容器。
在功能開(kāi)始運(yùn)行之前,將為每個(gè)容器分配必要的CPU和RAM容量。當(dāng)函數(shù)完成運(yùn)行時(shí),分配的RAM乘以函數(shù)運(yùn)行所花費(fèi)的時(shí)間。AWS根據(jù)分配的內(nèi)存和功能運(yùn)行時(shí)間向客戶收費(fèi)。
AWS Lambda可以同時(shí)執(zhí)行同一功能或來(lái)自同一AWS賬戶的不同功能的許多實(shí)例。這使Lambda適合部署高度可擴(kuò)展的云計(jì)算解決方案。
什么是AWS Lambda冷啟動(dòng)?
運(yùn)行Lambda函數(shù)時(shí),只要您運(yùn)行它,它就保持活動(dòng)狀態(tài)。這意味著您的容器保持活動(dòng)狀態(tài)并可以執(zhí)行。一段時(shí)間不活動(dòng)后,AWS可能會(huì)丟棄該容器,并且您的功能會(huì)變得不活動(dòng)或處于冷狀態(tài)。當(dāng)您執(zhí)行無(wú)效的Lambda函數(shù)時(shí),就會(huì)發(fā)生冷啟動(dòng)。如果沒(méi)有可用的容器,則會(huì)執(zhí)行不活動(dòng)的Lamda函數(shù),并且該函數(shù)需要啟動(dòng)一個(gè)新容器。當(dāng)有可用的容器時(shí),蠕蟲(chóng)就會(huì)啟動(dòng)。
在冷啟動(dòng)中啟動(dòng)新容器會(huì)產(chǎn)生延遲。這就是為什么冷啟動(dòng)會(huì)使無(wú)服務(wù)器應(yīng)用程序響應(yīng)變慢的原因。
減少Lambda冷啟動(dòng)影響的5種方法
您無(wú)法完全避免冷啟動(dòng),但是可以通過(guò)使用以下提示來(lái)減少其持續(xù)時(shí)間和頻率。至冷啟動(dòng):
首選動(dòng)態(tài)類(lèi)型語(yǔ)言 -使用諸如Node.js或Python之類(lèi)的語(yǔ)言,而不是諸如C#和Java之類(lèi)的靜態(tài)類(lèi)型編程語(yǔ)言。動(dòng)態(tài)類(lèi)型語(yǔ)言會(huì)檢查您在運(yùn)行時(shí)鍵入的內(nèi)容,而不是靜態(tài)類(lèi)型語(yǔ)言中的編譯時(shí)。
避免使用lambda表達(dá)式在虛擬私有云(VPC) -a VPC是一個(gè)孤立的,安全的,私人托管在公共云的云。VPC將您的計(jì)算資源彼此隔離,這會(huì)增加延遲時(shí)間并導(dǎo)致冷啟動(dòng)。
避免在lambda內(nèi)部進(jìn)行HTTPS調(diào)用 -SSL握手和其他與安全性相關(guān)的調(diào)用會(huì)產(chǎn)生冷啟動(dòng),因?yàn)樗鼈兪蹸PU能力的限制。
避免依賴-掃描類(lèi)路徑(如Spring)的Java依賴會(huì)導(dǎo)致冷啟動(dòng)。另外,加載Java類(lèi)可能要花費(fèi)一些時(shí)間,并且可能導(dǎo)致冷啟動(dòng)。
與較低的內(nèi)存設(shè)置相比,在AWS Lambda上增加內(nèi)存以獲取更多的CPU容量 -這可以使Lambda的執(zhí)行時(shí)間更快,并且可以降低成本。
如何優(yōu)化AWS Lambda性能
Lambda的性能不只是冷啟動(dòng),這里有一些技巧可以用來(lái)提高性能。
優(yōu)化內(nèi)存大小
Lambda使您可以增加或減少分配給函數(shù)的RAM內(nèi)存量。RAM內(nèi)存大小會(huì)影響功能獲得的網(wǎng)絡(luò)帶寬量和CPU時(shí)間。
選擇盡可能小的RAM數(shù)量可能會(huì)增加應(yīng)用程序的延遲。如果增加的延遲超過(guò)節(jié)省的RAM成本,它還可能使您的應(yīng)用程序更昂貴。因此,您應(yīng)該通過(guò)在每種可用資源上測(cè)試Lambda函數(shù),在應(yīng)用程序的價(jià)格和性能之間找到理想的平衡點(diǎn)。
優(yōu)化語(yǔ)言運(yùn)行時(shí)
諸如Java和C#之類(lèi)的編譯語(yǔ)言的初始啟動(dòng)時(shí)間很慢。諸如Python和Node.js之類(lèi)的解釋語(yǔ)言具有更快的初始啟動(dòng)時(shí)間。您選擇的語(yǔ)言可能會(huì)影響應(yīng)用程序的性能。
AWS Lambda支持編譯和解釋語(yǔ)言。如果您的應(yīng)用程序?qū)Ω叻搴筒活l繁的流量敏感或需要低延遲,則應(yīng)使用解釋性語(yǔ)言。如果您的應(yīng)用程序沒(méi)有遇到流量高峰,并且您知道流量的樣子,則可以使用所需的任何語(yǔ)言。
監(jiān)控效果
監(jiān)視AWS Lambda可為您提供識(shí)別可能對(duì)性能造成負(fù)面影響的問(wèn)題所需的信息。您可以使用AWS X-Ray在組件級(jí)別監(jiān)視應(yīng)用程序。X-Ray使您能夠跟蹤整個(gè)執(zhí)行過(guò)程中的應(yīng)用程序生命周期。因此,您可以更深入地了解Lambda函數(shù)的組件,并查看諸如延遲之類(lèi)的指標(biāo)。
結(jié)論
有很多方法可以減少冷啟動(dòng)的影響。您可以使用動(dòng)態(tài)類(lèi)型的語(yǔ)言,避免依賴關(guān)系或避免在lambda內(nèi)部進(jìn)行HTTPS調(diào)用。但是,您無(wú)法完全消除它們。您可以通過(guò)優(yōu)化內(nèi)存大小,監(jiān)視性能和優(yōu)化語(yǔ)言運(yùn)行時(shí)來(lái)提高整體Lambda性能。