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





