騰訊雲 Serverless 雲函數併發管理能力解讀

近期,騰訊雲 Serverless 雲函數發佈了併發管理能力升級版,提供了 3 個維度的併發額度管理的功能。該功能究竟提供了哪些能力,有哪些使用場景?本文將爲您全方位解讀併發管理功能,並對多種使用場景提供配置建議。

背景介紹

原先,創建一個函數,默認具有300的併發數量上限。針對小的低頻業務,300 的併發值足夠使用。但是遇到業務量上漲、支撐大型運營活動等大併發的情況,開發者就需要通過提工單聯繫平臺方,申請提升函數併發額度。這樣可能導致:

  1. 每遇到一次大併發,就需要聯繫一次平臺方來提升配額,時效性弱。
  2. 申請等待週期時會導致上漲的業務部分有損。
  3. 在評估量級時,也可能出現評估不足,導致需要再次申請,低效。

併發能力升級

相對於原有的函數默認固定的併發值,本次上線的併發管理能力,有以下方面的優化:

  1. 將單一函數的併發調整放開給了出來,用戶可以自行來控制併發數。
  2. 併發額度由單一的函數維度,移到了賬號維度。
  3. 賬號下默認具有一定的併發額度,由賬號下的函數所共享的,不需要單獨爲其中一個大併發的函數申請額度。

因此,在當前的模式下,默認賬號具有的 128000 MB的額度,可以供 128 MB配置內存函數啓動運行1000個併發;在這種情況下,用戶無需去尋找平臺申請,就可以獲得比調整前更高的一個併發額度,用於支撐上漲的業務。

併發的處理

由於賬號級別的額度是在賬號下的多個函數間共享的,在多個函數同時運行的情況下,因爲流量突增、業務上漲導致併發增高的函數在佔用完全部空閒額度後,可能會和平穩運行的函數之間產生衝突。

這種情況下,有兩種解決方案:

一方面可以通過平臺申請提升更高的賬號額度,來滿足上漲業務帶來的併發上漲;

另外一方面,也可以通過將部分額度分配給具體函數,來保障具體函數的運行可靠性。

下面我將具體說一下第二種方式。舉個例子,在同樣的賬號下,函數 A 提供 H5 頁面用於秒殺的運營活動,函數 B 在進行後臺的流式數據處理。在 B 函數啓動了 300 併發進行業務處理時,運營活動會受限於 A 函數,最大僅能跑到 700 併發;而函數 A 的業務壓力下,如果 B 函數也有業務量上漲,將無配額可用導致無法啓動更多實例。

在上面的例子中,如果要保證 B 函數數據處理流程的可靠性,可以爲這個函數設置到 350 的保留併發配額;此時,這個額度將從賬號維度劃給這個函數單獨使用,而運營活動所使用的 A 函數將僅僅可以最大使用的 650 併發的額度。函數 B 在設置到 350 的保留併發額度後,在業務持續上升後,最大也僅僅可以使用到配置的這個額度,此時,就算是賬號維度的額度仍然有剩餘時,B 函數也無法去使用。

通過保留額度的設置,一方面,我們可以對函數的運行進行保障,避免多個函數共享額度時,由於其他業務的函數佔用導致本函數無法運行產生損失,另外一方面,保留配額也定義了函數的運行額度上限。

因此,針對函數的併發管理控制,可以基於業務來進行更精細的控制,有以下三點建議:

  1. 針對開發測試階段的函數,由於請求量小,無業務壓力,併發也極少,可以不配置保留額度而僅僅使用賬號維度的共享額度;
  2. 針對穩定運行的函數,併發通常是確定的,浮動範圍也不會很大,這個時候可以給這個函數設置稍微有一點餘量的保留額度,來保障函數的額度不受共享的影響;
  3. 針對運營活動、有可能性突增併發的函數,可以利用賬號維度的高額度,來充分利用和支撐業務爆發。

當前預置額度的設置,是設置在函數的版本上,也是從賬號維度的併發配額或函數上的保留額度中扣減下來的。

通過設置預置額度可以預想啓動所需量的併發實例,完成實例的初始化並等待事件的到來。針對函數的請求將不會有冷啓動時間,直接就可以在已經完成準備、初始化完成的實例中得到運行。

在時延敏感的業務,例如前端的 SSR 頁面響應;或者是初始化時間較長的業務,例如 AI 推理的模型加載過程;這些場景下,通過給函數設置上一定的預置可以保障業務更好的運行。

同時,預置的配額也不是實例併發的上限,在業務量上漲到超過已經預置的實例可以承載的時候,函數平臺仍然會根據函數的保留配額或者是賬號的配額,拉起更多的實例來支持業務運行。

併發使用場景設置建議

一個賬號下有多個業務都在同時使用雲函數進行支撐時,函數的併發配額就需要進行按需調度。根據不同的業務特性來進行合理合適的設置。

例如有波峯波谷的前端業務,有平穩運行波動不大的數據處理業務,有偶爾才運行一次的定時運維任務,也有併發不大但是計算量重、計算時間長的視頻處理業務;

在這些業務中,根據重要性、是否接受一定損失來說,又有不同的區分:前端業務保障用戶體驗,要求加載速度快,但是可以有一定的錯誤容忍度;數據處理的要求高,不能接收延遲、波動或失敗;定時運維任務偶爾運行,不用投入過多的關注,運行正常即可;而視頻處理業務,可以接受按需調度,失敗時能自動重試就行。

根據不同的業務特性、容錯額度、業務波動情況、時延要求,我們就可以按照不同的情況來進行不同的設置。上述幾項業務中,併發設置有以下幾點建議:

  • 對前端業務來說,要求加載速度快,但是有波峯波谷,這種情況我們就可以爲函數配置一定量的預置額度,例如按最大使用量的60%來設置,但是同時不設置函數的保留額度,確保在高峯到來時能充分利用總配額;
  • 針對數據處理業務,波動不大但是容錯低,我們可以爲函數配置一定量的保留額度,確保不會有其他業務使用的共享額度導致數據處理業務的問題;
  • 運維任務定時運行,沒有高要求,可以不做任何配置,使用賬號維度的配額來處理就行;
  • 針對視頻處理業務,計算量大,而且可以按需排隊處理任務,我們設定好一定的保留額度,讓業務跑滿併發額度,充分利用好且控制好計算資源。

保留配額另一種用法

保留配額還有另外一種用法——對業務的限制或關停。在有緊急事項發生,例如漏洞攻擊、循環調用失控等情況出現時,爲了避免有重大損失,可以通過設置保留配額,將額度控制在極小的值上來避免運行失控,甚至可以設置爲 0 來關閉函數的運行。

內存和併發額度的關係

當前額度按內存進行計算,配置內存大的函數,併發運行時佔用的額度多,而配置內存小的函數在多併發運行時佔用的額度小;

由於函數服務的資源用量計費項和函數的配置內存強相關,通過內存進行額度控制,一方面可以讓我們儘量採用合適的內存來實現業務,另外一方面,針對整體的支出也可以進行有效的控制。

總結

通過提供多層次的併發配額管理能力,目前我們可以獲得更強的函數併發管理控制的權限,無需再等待平臺方的調整就可以自行根據業務需求快速調整。

目前併發管理功能已經上線,函數可以配置保留併發,同時預置併發功能也處於內測階段,歡迎大家申請試用。針對併發管理的更多場景、用法,也歡迎大家留言探討和反饋。

試用申請鏈接: https://cloud.tencent.com/apply/p/j1fl01i6f2i

One More Thing

立即體驗騰訊雲 Serverless Demo,領取 Serverless 新用戶禮包 👉 serverless/start

歡迎訪問:Serverless 中文網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章