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