您應該為 AWS Lambda 函數使用預置並發嗎?

您應該為 AWS Lambda 函數使用預置並發嗎?

Lambda 函數是 Amazon Web Services 上任何無服務器部署的重要組成部分。然而,它們並不神奇,並且由於硬件的物理限制,可能會帶來一些缺點,例如冷啟動。預置並發可以幫助緩解這個問題。

什麼是“冷啟動”?

“冷啟動”對於 Lambda 來說是一個大問題,尤其是在考慮將其用於延遲敏感的應用程序時。該術語指的是 Lambda 函數的執行環境從頭開始啟動並運行所需的啟動時間。

Lambda 函數在調用後將保持“溫暖”一段時間。非VPC功能將預熱5分鐘,VPC功能將預熱15分鐘。在此期間,如果再次調用該函數,它將立即響應。這對於那些經歷持續、規律流量的服務來說非常有用。

但是,如果您的代碼有一段時間沒有運行,或者需要擴展並運行多個並發函數,那麼它將從頭開始。根據AWS的分析,生產工作負載中冷啟動發生的請求不到1%,這對於許多場景來說是可以接受的。

但是,根據您使用的運行時(Java 和 .NET 都需要一段時間進行 JIT 編譯),冷啟動可能會延遲函數調用數秒。這對於延遲敏感的應用程序來說是不可接受的。

不再有冷啟動

Lambda 的預配置並發模式可以幫助解決這個問題。您可以將其視為 Lambda 函數的預留實例 – 本質上是預留一定量的容量,並且 Lambda 函數將在整個期間保持溫暖。

這有很大的好處,包括幾乎完全消除啟動成本。實際上,您根本不必擔心初始化代碼優化,因為它將運行一次並保持運行狀態。這對於 Java 和 C#/.NET 等 JIT 編譯語言來說是一個主要好處,因為它們可能具有較大的二進製文件和啟動時間來加載它們。

與前面的示例(其中函數是冷啟動的)相比,預配置並發會提前啟動所有函數並使其保持熱狀態。當需要調用時,Lambda 將使用熱函數來執行它。

然而,它也有其自身的缺點。由於 Lambda 選擇函數版本的方式,預配置並發不適用於 $LATEST 標籤。您將需要創建一個新別名,為該別名配置並發性,然後在版本更改時更新它。

同樣重要的是要了解,儘管使函數運行很長一段時間,但預置並發並不會使您的應用程序具有狀態。Lambda 函數可能並且將會被破壞,您不應該將它們視為 EC2 服務器。

預配置並發成本是多少?

這個問題的答案取決於您的函數執行的頻率,以及您創建多個執行環境以滿足並行需求的頻率。

對於預配置並發,需要擔心的主要數字是同時運行的函數執行的數量。例如,如果您有一個每秒調用 10 次的函數,並且每次調用持續 500 毫秒,則該函數平均每秒有 5 個並發執行。

總體而言,預置並發的成本並不比常規 Lambda 函數高太多。您可以使用 AWS 的定價計算器計算出您個人需要花費多少費用。例如,每秒調用 10 次、調用時間為 500 毫秒、內存為 256 MB 的 Lambda 每月運行成本為 60 美元。

然而,同樣的功能,但有 10 次預配置執行,每月的費用要高一些,為 64.50 美元。總體而言,根據使用情況,成本可能會小幅增加 5-10%。

然而,預配置並發實際上每 GB 秒的使用成本更便宜。這意味著,如果您始終以非常接近 100% 的使用率運行,則預留並發性可能比使用常規 Lambda 定價更便宜。這很大程度上歸因於這樣一個事實:減少 Lambda 在初始化代碼中花費的時間總體上更便宜。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *