編譯 | 星璇
出品 | 51CTO技術棧(微信號:blog51cto)
Marcia 是 Amazon Web Services 的首席開發(fā)倡導者,在軟件行業(yè)構建和擴展應用程序方面擁有20年的工作經(jīng)驗。她熱衷于設計能夠充分利用云并擁抱DevOps文化的系統(tǒng)。最近她發(fā)表了一篇博文,帶來了一個AWS Lambda重大改進:擴展速度提升了 12 倍!
1、Lambda函數(shù)更新,擴展速度倍增
現(xiàn)在,AWS Lambda 的擴展速度提高了 12 倍。每個同步調(diào)用的 Lambda 函數(shù)現(xiàn)在每 10 秒擴展 1000 個并發(fā)執(zhí)行,直到所有函數(shù)的聚合并發(fā)達到賬戶的并發(fā)限制。此外,帳戶中的每個功能現(xiàn)在都可以彼此獨立地擴展,無論這些功能是如何調(diào)用的。這些改進無需額外成本,并且無需在現(xiàn)有功能中進行任何配置。
圖片
使用傳統(tǒng)架構構建可擴展且高性能的應用程序可能具有挑戰(zhàn)性,通常需要過度配置計算資源或復雜的緩存解決方案來滿足峰值需求和不可預測的流量。許多開發(fā)人員選擇 Lambda 是因為當應用程序面臨不可預測的流量時,它可以按需擴展。
在此更新之前,Lambda 函數(shù)最初可以在第一分鐘內(nèi)在賬戶級別擴展 500-3,000 個并發(fā)執(zhí)行(取決于區(qū)域),然后每分鐘擴展 500 個并發(fā)執(zhí)行,直到達到賬戶的并發(fā)限制。
由于此擴展限制由同一賬戶和區(qū)域中的所有功能共享,因此如果某個功能遇到流量涌入,可能會影響同一賬戶中其他功能的吞吐量。這增加了監(jiān)控一些可能超出帳戶限制的功能的工程工作量,從而導致嘈雜的鄰居場景并降低同一帳戶中其他功能的總體并發(fā)性。
現(xiàn)在,通過這些擴展改進,流量變化較大的客戶可以比以前更快地達到并發(fā)目標。例如,發(fā)布突發(fā)新聞報道的新聞網(wǎng)站或進行限時搶購的在線商店將迎來大量訪問者涌入。由于這些改進,它們現(xiàn)在的擴展速度比以前快了 12 倍。
此外,使用Amazon Athena和Amazon Redshift等服務以及基于Lambda 的標量 UDF來執(zhí)行數(shù)據(jù)豐富或數(shù)據(jù)轉(zhuǎn)換的客戶將受益于這些改進。這些服務依賴于批處理數(shù)據(jù)并將其分塊傳遞給 Lambda,同時調(diào)用多個并行函數(shù)。增強的并發(fā)擴展行為確保 Lambda 可以快速擴展并滿足服務級別協(xié)議 (SLA) 要求。
2、實踐中究竟如何?
下圖顯示了一個函數(shù)每 10 秒接收并處理請求。帳戶并發(fā)限制設置為 7,000 個并發(fā)請求,并在同一帳戶中的所有功能之間共享。每個函數(shù)的擴展速率固定為每 10 秒 1,000 個并發(fā)執(zhí)行。此速率獨立于同一帳戶中的其他功能,這樣可以更輕松地預測此功能將如何擴展和限制請求(如果需要)。
圖片
- 09:00:00 – 該函數(shù)已經(jīng)運行了一段時間,并且已經(jīng)有 1,000 個并發(fā)執(zhí)行正在處理。
- 09:00:10 – 十秒后,又爆發(fā)了 1,000 個新請求。該函數(shù)可以毫無問題地處理它們,因為該函數(shù)每 10 秒最多可以擴展至 1,000 個并發(fā)執(zhí)行。
- 09:00:20 – 同樣的情況也發(fā)生在這里:一千個新請求。
- 09:00:30 – 該函數(shù)現(xiàn)在收到 1,500 個新請求。由于函數(shù)的最大擴展容量為每 10 秒 1,000 個請求,因此其中 500 個請求將受到限制。
- 09:01:00 – 此時,該函數(shù)已處理 4,500 個并發(fā)請求。但突然出現(xiàn)了 3,000 個新請求。Lambda 處理 1,000 個新請求并限制 2,000 個,因為該函數(shù)每 10 秒可以擴展到 1,000 個請求。
- 09:01:10 – 10 秒后,又爆發(fā)了 2,000 個請求,該函數(shù)現(xiàn)在可以再處理 1,000 個請求。但是,其余 1,000 個請求會受到限制,因為該函數(shù)可以擴展到每 10 秒 1,000 個請求。
- 09:01:20 – 現(xiàn)在該函數(shù)正在處理 6,500 個并發(fā)請求,并且有 1,000 個傳入請求。其中前 500 個請求得到處理,但其他 500 個請求受到限制,因為該函數(shù)達到了 7,000 個請求的帳戶并發(fā)限制。請務必記住,可以通過在AWS 管理控制臺中創(chuàng)建支持票證來提高賬戶并發(fā)限制。
如果你的賬戶中有多個函數(shù),這些函數(shù)將獨立擴展,直到達到賬戶總并發(fā)限制。之后,所有新的調(diào)用都將受到限制。
3、可用范圍及具體規(guī)則
默認情況下,所有功能都會啟用這些擴展改進。據(jù)悉,從去年 11 月 26 日開始到 12 月中旬,AWS 將逐步向除中國和 GovCloud 區(qū)域之外的所有 AWS 區(qū)域推出這些擴展改進。
具體規(guī)則如下:
Lambda不會累積并發(fā)擴展率中未使用的部分。這意味著,在任何時刻,你的擴展速率始終最大為1000個并發(fā)單元。例如,如果在10秒的時間間隔內(nèi)沒有使用任何可用的1000個并發(fā)單元,那么在接下來的10秒間隔內(nèi)就不會增加1000個額外的單元。在接下來的10秒內(nèi),并發(fā)擴展率仍然是1000。
只要你的函數(shù)繼續(xù)接收越來越多的請求,Lambda就會以最快的速度擴展,達到帳戶的并發(fā)限制。可以通過配置保留并發(fā)來限制單個函數(shù)可以使用的并發(fā)量。如果請求的速度快于函數(shù)的擴展速度,或者函數(shù)處于最大并發(fā)狀態(tài),那么其他請求將失敗,并出現(xiàn)節(jié)流錯誤(429狀態(tài)代碼)。
4、總結(jié)
以前,Lambda 函數(shù)在賬戶級別共享擴展限制,如果一個函數(shù)遇到高流量,則會導致潛在的吞吐量問題。AWS Lambda 函數(shù)更新后,擴展速度提高了 12 倍。現(xiàn)在,每個函數(shù)每 10 秒擴展 1,000 個并發(fā)執(zhí)行,獨立于同一賬戶中的其他函數(shù),直到達到賬戶的聚合并發(fā)限制。此更新無需額外成本或配置更改,通過允許快速擴展,使面臨不可預測流量的應用程序受益匪淺。
新的獨立擴展系統(tǒng)可以讓函數(shù)更快地達到并發(fā)目標,這對于突發(fā)新聞或秒殺閃購等場景將會更加出色。
此外,利用 Lambda 進行數(shù)據(jù)處理的 Amazon Athena 和 Amazon Redshift 等服務將因此次更新而獲得性能增強。這些改進默認啟用,并將推廣到除中國和 GovCloud 區(qū)域之外的所有 AWS 區(qū)域。