近期,騰訊云Serverless云函數(shù)發(fā)布了并發(fā)管理能力升級版,提供了3個維度的并發(fā)額度管理的功能。該功能究竟提供了哪些能力,有哪些使用場景?本文將為您全方位解讀并發(fā)管理功能,并對多種使用場景提供配置建議。
背景介紹
原先,創(chuàng)建一個函數(shù),默認具有300的并發(fā)數(shù)量上限。針對小的低頻業(yè)務(wù),300的并發(fā)值足夠使用。但是遇到業(yè)務(wù)量上漲、支撐大型運營活動等大并發(fā)的情況,開發(fā)者就需要通過提工單聯(lián)系平臺方,申請?zhí)嵘瘮?shù)并發(fā)額度。這樣可能導(dǎo)致:
1.每遇到一次大并發(fā),就需要聯(lián)系一次平臺方來提升配額,時效性弱。
2.申請等待周期時會導(dǎo)致上漲的業(yè)務(wù)部分有損。
3.在評估量級時,也可能出現(xiàn)評估不足,導(dǎo)致需要再次申請,低效。
并發(fā)能力升級
相對于原有的函數(shù)默認固定的并發(fā)值,本次上線的并發(fā)管理能力,有以下方面的優(yōu)化:
1.將單一函數(shù)的并發(fā)調(diào)整放開給了出來,用戶可以自行來控制并發(fā)數(shù)。
2.并發(fā)額度由單一的函數(shù)維度,移到了賬號維度。
3.賬號下默認具有一定的并發(fā)額度,由賬號下的函數(shù)所共享的,不需要單獨為其中一個大并發(fā)的函數(shù)申請額度。
因此,在當(dāng)前的模式下,默認賬號具有的128000 MB的額度,可以供128 MB配置內(nèi)存函數(shù)啟動運行1000個并發(fā);在這種情況下,用戶無需去尋找平臺申請,就可以獲得比調(diào)整前更高的一個并發(fā)額度,用于支撐上漲的業(yè)務(wù)。
并發(fā)的處理
由于賬號級別的額度是在賬號下的多個函數(shù)間共享的,在多個函數(shù)同時運行的情況下,因為流量突增、業(yè)務(wù)上漲導(dǎo)致并發(fā)增高的函數(shù)在占用完全部空閑額度后,可能會和平穩(wěn)運行的函數(shù)之間產(chǎn)生沖突。
這種情況下,有兩種解決方案:
一方面可以通過平臺申請?zhí)嵘叩馁~號額度,來滿足上漲業(yè)務(wù)帶來的并發(fā)上漲;
另外一方面,也可以通過將部分額度分配給具體函數(shù),來保障具體函數(shù)的運行可靠性。
下面我將具體說一下第二種方式。舉個例子,在同樣的賬號下,函數(shù)A提供H5頁面用于秒殺的運營活動,函數(shù)B在進行后臺的流式數(shù)據(jù)處理。在B函數(shù)啟動了300并發(fā)進行業(yè)務(wù)處理時,運營活動會受限于A函數(shù),最大僅能跑到700并發(fā);而函數(shù)A的業(yè)務(wù)壓力下,如果B函數(shù)也有業(yè)務(wù)量上漲,將無配額可用導(dǎo)致無法啟動更多實例。
在上面的例子中,如果要保證B函數(shù)數(shù)據(jù)處理流程的可靠性,可以為這個函數(shù)設(shè)置到350的保留并發(fā)配額;此時,這個額度將從賬號維度劃給這個函數(shù)單獨使用,而運營活動所使用的A函數(shù)將僅僅可以最大使用的650并發(fā)的額度。函數(shù)B在設(shè)置到350的保留并發(fā)額度后,在業(yè)務(wù)持續(xù)上升后,最大也僅僅可以使用到配置的這個額度,此時,就算是賬號維度的額度仍然有剩余時,B函數(shù)也無法去使用。
通過保留額度的設(shè)置,一方面,我們可以對函數(shù)的運行進行保障,避免多個函數(shù)共享額度時,由于其他業(yè)務(wù)的函數(shù)占用導(dǎo)致本函數(shù)無法運行產(chǎn)生損失,另外一方面,保留配額也定義了函數(shù)的運行額度上限。
因此,針對函數(shù)的并發(fā)管理控制,可以基于業(yè)務(wù)來進行更精細的控制,有以下三點建議:
1.針對開發(fā)測試階段的函數(shù),由于請求量小,無業(yè)務(wù)壓力,并發(fā)也極少,可以不配置保留額度而僅僅使用賬號維度的共享額度;
2.針對穩(wěn)定運行的函數(shù),并發(fā)通常是確定的,浮動范圍也不會很大,這個時候可以給這個函數(shù)設(shè)置稍微有一點余量的保留額度,來保障函數(shù)的額度不受共享的影響;
3.針對運營活動、有可能性突增并發(fā)的函數(shù),可以利用賬號維度的高額度,來充分利用和支撐業(yè)務(wù)爆發(fā)。
當(dāng)前預(yù)置額度的設(shè)置,是設(shè)置在函數(shù)的版本上,也是從賬號維度的并發(fā)配額或函數(shù)上的保留額度中扣減下來的。
通過設(shè)置預(yù)置額度可以預(yù)想啟動所需量的并發(fā)實例,完成實例的初始化并等待事件的到來。針對函數(shù)的請求將不會有冷啟動時間,直接就可以在已經(jīng)完成準備、初始化完成的實例中得到運行。
在時延敏感的業(yè)務(wù),例如前端的SSR頁面響應(yīng);或者是初始化時間較長的業(yè)務(wù),例如AI推理的模型加載過程;這些場景下,通過給函數(shù)設(shè)置上一定的預(yù)置可以保障業(yè)務(wù)更好的運行。
同時,預(yù)置的配額也不是實例并發(fā)的上限,在業(yè)務(wù)量上漲到超過已經(jīng)預(yù)置的實例可以承載的時候,函數(shù)平臺仍然會根據(jù)函數(shù)的保留配額或者是賬號的配額,拉起更多的實例來支持業(yè)務(wù)運行。
并發(fā)使用場景設(shè)置建議
一個賬號下有多個業(yè)務(wù)都在同時使用云函數(shù)進行支撐時,函數(shù)的并發(fā)配額就需要進行按需調(diào)度。根據(jù)不同的業(yè)務(wù)特性來進行合理合適的設(shè)置。
例如有波峰波谷的前端業(yè)務(wù),有平穩(wěn)運行波動不大的數(shù)據(jù)處理業(yè)務(wù),有偶爾才運行一次的定時運維任務(wù),也有并發(fā)不大但是計算量重、計算時間長的視頻處理業(yè)務(wù);
在這些業(yè)務(wù)中,根據(jù)重要性、是否接受一定損失來說,又有不同的區(qū)分:前端業(yè)務(wù)保障用戶體驗,要求加載速度快,但是可以有一定的錯誤容忍度;數(shù)據(jù)處理的要求高,不能接收延遲、波動或失敗;定時運維任務(wù)偶爾運行,不用投入過多的關(guān)注,運行正常即可;而視頻處理業(yè)務(wù),可以接受按需調(diào)度,失敗時能自動重試就行。
根據(jù)不同的業(yè)務(wù)特性、容錯額度、業(yè)務(wù)波動情況、時延要求,我們就可以按照不同的情況來進行不同的設(shè)置。上述幾項業(yè)務(wù)中,并發(fā)設(shè)置有以下幾點建議:
·對前端業(yè)務(wù)來說,要求加載速度快,但是有波峰波谷,這種情況我們就可以為函數(shù)配置一定量的預(yù)置額度,例如按最大使用量的60%來設(shè)置,但是同時不設(shè)置函數(shù)的保留額度,確保在高峰到來時能充分利用總配額;
·針對數(shù)據(jù)處理業(yè)務(wù),波動不大但是容錯低,我們可以為函數(shù)配置一定量的保留額度,確保不會有其他業(yè)務(wù)使用的共享額度導(dǎo)致數(shù)據(jù)處理業(yè)務(wù)的問題;
·運維任務(wù)定時運行,沒有高要求,可以不做任何配置,使用賬號維度的配額來處理就行;
·針對視頻處理業(yè)務(wù),計算量大,而且可以按需排隊處理任務(wù),我們設(shè)定好一定的保留額度,讓業(yè)務(wù)跑滿并發(fā)額度,充分利用好且控制好計算資源。
保留配額另一種用法
保留配額還有另外一種用法——對業(yè)務(wù)的限制或關(guān)停。在有緊急事項發(fā)生,例如漏洞攻擊、循環(huán)調(diào)用失控等情況出現(xiàn)時,為了避免有重大損失,可以通過設(shè)置保留配額,將額度控制在極小的值上來避免運行失控,甚至可以設(shè)置為0來關(guān)閉函數(shù)的運行。
內(nèi)存和并發(fā)額度的關(guān)系
當(dāng)前額度按內(nèi)存進行計算,配置內(nèi)存大的函數(shù),并發(fā)運行時占用的額度多,而配置內(nèi)存小的函數(shù)在多并發(fā)運行時占用的額度小;
由于函數(shù)服務(wù)的資源用量計費項和函數(shù)的配置內(nèi)存強相關(guān),通過內(nèi)存進行額度控制,一方面可以讓我們盡量采用合適的內(nèi)存來實現(xiàn)業(yè)務(wù),另外一方面,針對整體的支出也可以進行有效的控制。
總結(jié)
通過提供多層次的并發(fā)配額管理能力,目前我們可以獲得更強的函數(shù)并發(fā)管理控制的權(quán)限,無需再等待平臺方的調(diào)整就可以自行根據(jù)業(yè)務(wù)需求快速調(diào)整。
目前并發(fā)管理功能已經(jīng)上線,函數(shù)可以配置保留并發(fā),同時預(yù)置并發(fā)功能也處于內(nèi)測階段,歡迎大家申請試用。