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