配置單實例多并發
更新時間 2025-01-13 16:37:11
最近更新時間: 2025-01-13 16:37:11
分享文章
本章介紹函數工作流如何配置函數單實例多并發,
說明該特性僅FunctionGraph v2版本支持。
概述
默認情況下,每個函數實例同一時刻只處理一個請求,多并發時,例如并發三個請求,FunctionGraph會啟動三個函數實例處理請求。FunctionGraph推出的單實例多并發能力,可以讓您在一個實例上并發處理多個請求。
應用場景
單實例多并發適合函數處理邏輯中有較長時間等待下游服務響應的場景,也適合函數邏輯中初始化時間較長的場景,具備以下優勢:
- 降低冷啟動概率,優化函數處理時延:例如并發三個請求,不配置單實例多并發,FunctionGraph默認啟動三個實例處理請求,會有三次冷啟動。若配置了單實例支持三并發,三個并發請求,FunctionGraph只啟動一個實例處理請求,減少了兩次冷啟動。
- 減少總請求處理時長,節省費用:單實例單并發下,多個請求的總處理時長為每個請求的處理時長相加。
單實例單并發與單實例多并發的對比
當一個函數執行需要花費5秒,若配置為單實例單并發,三次函數調用請求分別在三個函數實例執行,總執行時長為15秒。
若配置為單實例多并發,設置單實例并發數為5,即單個實例最多支持5個并發請求,如果有三次函數調用請求,將在一個實例內并發處理,總執行時間為5秒。
說明單實例并發數大于1,在您設置的“單函數最大實例數”范圍內,超過單實例并發處理能力時會自動擴容新實例。
單并發與多并發對比
| 對比項 | 單實例單并發 | 單實例多并發 |
|---|---|---|
| 日志打印 | - | Node.js Runtime使用console.info()函數,Python Runtime使用print()函數,Java Runtime使用System.out.println()函數打印日志, 該方式會把當前請求的Request ID包含在日志內容中。 當多請求在同一個實例并發處理時,當前請求可能有很多個,繼續使用這些函數打印日志會導致Request ID錯亂。 此時應該使用context.getLogger(),獲取一個日志輸出對象,通過這個日志輸出對象打印日志, 例如Python Runtime:log = context.getLogger()log.info("test") |
| 共享變量 | 不涉及 | 單實例多并發處理時,修改共享變量會導致錯誤。這要求您在編寫函數時,對于非線程安全的變量修改要進行互斥保護。 |
| 監控指標 | 按實際情況進行監控。 | 相同負載下,函數的實例數明顯減少。 |
| 流控錯誤 | 不涉及 | 太多請求時,body中的errorcode為“FSS.0429” ,響應頭中的status為429 , 錯誤信息提示:Your request has been controlled by overload sdk, please retry later。 |
配置單實例多并發
- 登錄函數工作流控制臺,在左側的導航欄選擇“函數 > 函數列表”。
- 選擇待配置的函數,單擊進入函數詳情頁。
- 選擇“設置 > 并發”,開始配置。
參見表進行配置,完成后單擊“保存”。
并發基礎配置

參數說明
參數 說明 單實例并發數 單個實例支持的請求并發數。取值范圍為1-1000。 單函數最大實例數 單個函數的運行實例數,默認值400,最大值為1000;-1表示不限制實例數;0代表禁用。 說明超過實例數限制處理能力的請求會被直接丟棄,而不是重試。
當前超過實例數限制導致的請求錯誤不會直接顯示在函數日志中,您可以通過配置函數異步來獲取錯誤詳細信息。
配置約束
- 對于Python函數,由于Python GIL鎖導致實例上的線程被綁定到一個核上,造成多并發無法使用多核,即使配置更大資源規格也無法提升函數處理性能。
- 對于Node.js函數,由于V8引擎的單進程單線程,造成多并發無法使用多核,即使配置更大資源規格也無法提升函數處理性能。