設定函數的最小執行個體數≥1後,可以根據業務情況,並結合執行個體擴容限制速度配置最小執行個體數的彈性策略:指定時間段或指定指標利用率達到設定閾值後對最小執行個體數進行擴縮容,保障效能的同時提高執行個體利用率。
執行個體伸縮行為
設定函數的最小執行個體數≥1後,系統在處理請求時,優先分配請求至基於最小執行個體數啟動的彈性執行個體,執行個體不能滿足當前負載,系統自動擴容彈性執行個體作為補充。
隨著調用請求量的增加,Function Compute會持續建立新的執行個體,直到有足夠的執行個體處理請求或者達到設定的執行個體數上限。在執行個體擴容的過程中,將受到擴容速度限制,具體請參見各地區執行個體擴容速度限制。
隨著函數調用請求增加,設定最小執行個體數≥1和最小執行個體數=0兩種情境下,執行個體伸縮行為如下。
最小執行個體數=0
當執行個體總數或者執行個體擴容速度超過限制後,Function Compute將返迴流控錯誤(HTTP Status為429)。下圖展示在一個調用量快速增長的情境下,Function Compute的流控行為。
圖示中①:在達到突增執行個體數前,Function Compute立即建立執行個體,這個過程中有冷啟動,但沒有流控錯誤。
圖示中②:達到突增執行個體數後,執行個體數的增長受速度限制,部分請求會收到流控錯誤。
圖示中③:執行個體數超過配額限制後,部分請求收到流控錯誤。
最小執行個體數≥1
當突發的調用量較大時,大量的執行個體建立會受到流控限制導致請求失敗,執行個體的冷啟動也會增加請求延時。為避免這些問題,可以設定最小執行個體數≥1,提前鎖定資源。
與最小執行個體數=0情境相同的負載的情況下,設定最小執行個體數≥1後的流控行為如下。
圖示中①:在最小執行個體數被用滿之前,請求立即被執行,這個過程既沒有冷啟動,也沒有流控錯誤。
圖示中②:在最小執行個體數被用滿後,彈性執行個體達到突增執行個體數之前,Function Compute立即建立執行個體,這個過程中有冷啟動,但沒有流控錯誤。
各地區執行個體擴容速度限制
地區 | 突增執行個體數 | 執行個體增長速度 |
華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華南1(深圳) | 300 | 300/分鐘 |
其他 | 100 | 100/分鐘 |
如果對擴容速度有更高的需求,請加入DingTalk使用者群(DingTalk群號64970014484)申請。
最小執行個體數彈性策略
設定固定的最小執行個體數雖然能保證效能,但在業務低穀期可能導致資源浪費。為此,Function Compute提供了動態彈性策略,允許根據時間或業務指標自動調整最小執行個體數,從而提高資源使用率。
配置的彈性策略生效期間,將覆蓋函數設定的初始最小執行個體數。在沒有任何彈性策略生效的時間段內,系統將恢複使用初始配置的最小執行個體數。
如果配置了多條彈性策略,系統會計算每條策略觸發時的最小執行個體數,並取目前時間有效彈性策略中最小執行個體數的最大值作為當前實際的最小執行個體數。
更多資訊,請參見如何計算當前最小執行個體數?。
定時伸縮
適用情境
函數有明顯的周期性規律或可預知的流量高峰。當函數調用並發數大於最小執行個體數並發時,超出的部分系統自動擴容彈性執行個體。
配置樣本
配置兩個定時操作:在函數調用流量到來前,通過第一個定時配置擴容最小執行個體數;當流量減小後,通過第二個定時配置縮容最小執行個體數。具體如下圖所示。
在使用PutProvisionConfig API配置定時伸縮的請求參數時可參考以下資訊。為函數function_1配置定時伸縮策略,指定時區為Asia/Shanghai,即北京時間,配置的生效區間為2024-08-01 10:00:00至2024-08-30 10:00:00(北京時間),在每天20:00(北京時間)將最小執行個體數擴容至50,在每天22:00(北京時間)再將最小執行個體數收縮至10。
"scheduledActions": [
{
"name": "scale_up_action",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"target": 50,
"scheduleExpression": "cron(0 0 20 * * *)",
"timeZone": "Asia/Shanghai"
},
{
"name": "scale_down_action",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"target": 10,
"scheduleExpression": "cron(0 0 22 * * *)",
"timeZone": "Asia/Shanghai"
}
]Cron運算式說明
水位伸縮
適用情境
Function Compute系統會周期性地採集關鍵計量,並結合配置的最小執行個體數範圍來自動對最小執行個體數進行擴縮容,使其更好的貼合資源的真實使用量。此策略適用於函數的流量模式不可預測,但希望資源使用率維持在穩定水平的情境。
關鍵計量說明
水位伸縮策略通過追蹤以下關鍵計量來自動調整最小執行個體數。選擇正確的指標對於實現高效的彈性至關重要。
執行個體並發利用率
定義:指在採集周期內,所有預置執行個體(即最小執行個體數範圍內的執行個體)正在處理的並發請求總數,與這些執行個體能夠承載的最大並發請求總數的比值。
計算公式:
當前總並發請求數 / (當前最小執行個體數 × 函數單一實例並發度)適用情境:適用於大多數通用Web服務、API Gateway等 I/O 密集型或 CPU 密集型業務,其主要瓶頸是請求處理能力。
記憶體利用率
定義:指在採集周期內,所有預置執行個體的記憶體使用量情況。
計算公式:
平均使用記憶體 / 函數配置記憶體。適用情境:適用於記憶體密集型業務,如巨量資料處理、映像轉換、深度學習模型預先處理等,其效能瓶頸更多在於記憶體消耗而非請求並發數。
GPU資源使用率
定義:對於GPU執行個體,可以追蹤更細分的GPU資源使用方式,主要包括
GPU使用率和GPU顯存使用率。GPU使用率:反映GPU計算核心的繁忙程度。GPU顯存使用率:反映GPU顯存的佔用情況。
適用情境:專用於AI推理、科學計算等需要GPU加速的函數。根據模型對計算資源或顯存資源的依賴程度,選擇合適的指標進行伸縮。
配置樣本
以採集執行個體並發利用率指標為例,當流量不斷增加時,觸發擴容閾值,最小執行個體數開始擴容,當達到設定的最小執行個體數範圍的上限時停止擴容,超出部分的請求分配至按量彈性執行個體;當流量不斷減小時,觸發縮容閾值,最小執行個體數開始縮容。具體如下圖所示。
配置最小執行個體數的水位伸縮策略時,必須開啟執行個體層級指標功能,否則會報錯
400 InstanceMetricsRequired。關於開啟執行個體層級指標的方法,請參見配置執行個體層級指標。執行個體並發利用率只統計最小執行個體數範圍內彈性執行個體的並發情況,不包含按量彈性執行個體的資料。
執行個體並發利用率為當前最小執行個體數並發請求量與最小執行個體數範圍內最大可支援的並發請求量的比值,數值範圍為[0,1]。
在使用 PutProvisionConfig API配置水位伸縮的請求參數可參考以下資訊。為function_1函數配置水位伸縮策略,指定的時區為Asia/Shanghai,即北京時間,配置的生效區間為2024-08-01 10:00:00至2024-08-30 10:00:00(北京時間),追蹤執行個體並發利用率指標ProvisionedConcurrencyUtilization,執行個體並發利用率追蹤值為60%,超過60%時開始擴容,擴容上限為100;低於60%時開始縮容,縮容下限為10。
"targetTrackingPolicies": [
{
"name": "action_1",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"metricType": "ProvisionedConcurrencyUtilization",
"metricTarget": 0.6,
"minCapacity": 10,
"maxCapacity": 100,
"timeZone": "Asia/Shanghai"
}
]擴縮容計算原理
縮容時會通過縮容係數來實現相對保守的縮容過程,縮容係數取值範圍為(0,1]。縮容係數為系統參數,用於減緩縮容速度,防止縮容過快,無需手動設定。擴縮容目標值對計算結果向上取整得到最終結果,計算邏輯如下。
擴容目標值=當前最小執行個體數×(當前指標值/設定的利用率閾值)
縮容目標值=當前最小執行個體數×縮容係數×(1-當前指標值/設定的利用率閾值)
例如,當前指標值為80%,設定的執行個體並發利用率為40%,當前最小執行個體數為100,經過計算100×(80%/40%)=200。根據計算結果,最小執行個體數會擴容到200(不能超出設定的函數配額),以保證擴容後利用率閾值維持在40%附近。
如何計算當前最小執行個體數?
通過以下樣本,您將明確當前最小執行個體數的計算邏輯,即由初始配置的最小執行個體數與定時伸縮策略中設定的目標最小執行個體數共同決定。
假設,初始設定的最小執行個體數為5,並配置了兩條定時伸縮策略,指定時區為Asia/Shanghai,即北京時間,配置的生效區間為2025-06-09 10:00:00至2025-06-11 00:00:00(北京時間),在生效區間內,每天10:00(北京時間)將最小執行個體數擴容至20,每天22:00(北京時間)將最小執行個體數收縮至10。策略內容如下:
{
"defaultTarget": 5,
"scheduledActions": [
{
"name": "scale_up_action",
"startTime": "2025-06-09T10:00:00",
"endTime": "2025-06-11T00:00:00",
"target": 20,
"scheduleExpression": "cron(0 0 10 * * *)",
"timeZone": "Asia/Shanghai"
},
{
"name": "scale_down_action",
"startTime": "2025-06-09T10:00:00",
"endTime": "2025-06-11T00:00:00",
"target": 10,
"scheduleExpression": "cron(0 0 22 * * *)",
"timeZone": "Asia/Shanghai"
}
]
}在不同時間段,當前最小執行個體數的取值如下圖所示:
最大可響應並發值
不同的執行個體並發數,函數執行個體可響應的最大並發值計算邏輯如下:
單一實例單並發
最大可響應並發值=函數執行個體數量
單一實例多並發
最大可響應並發值=函數執行個體數量×單一實例並發度
關於執行個體並發度的應用情境、優勢、配置及影響,請參見設定執行個體並發度。
相關文檔
如果需要限制某個函數的執行個體上限,請參見配置函數配額。配置後,當此函數處於執行狀態的函數執行個體總數超過限制後,Function Compute將返迴流控錯誤。