函數計算為您提供按量模式和預留模式兩種實例使用模式。您可以根據兩種模式對應的實例總數及實例擴容速度的限制信息配置對應的彈性伸縮規則。在預留模式下,您可以通過定時修改限制和根據指標修改限制兩種方式解決預留實例利用不充分的問題。
實例伸縮限制
配置按量模式實例的伸縮限制
在處理函數調用請求時,函數計算會優先使用已有的可用實例。若當前實例已經滿載,函數計算會創建新的實例來處理請求。隨著調用請求量的增加,函數計算會持續創建新的實例,直到有足夠的實例處理請求或者達到您設置的實例數上限。在實例擴容的過程中,將受到以下限制。
當實例總數或者實例擴容速度超過限制后,函數計算將返回流控錯誤(HTTP Status
為429
)。下圖展示在一個調用量快速增長的場景下,函數計算的流控行為。
圖示中①:在達到突增實例數前,函數計算立即創建實例,這個過程中有冷啟動,但沒有流控錯誤。
圖示中②:達到突增實例數后,實例數的增長受速度限制,部分請求會收到流控錯誤。
圖示中③:實例數超過限制后,部分請求收到流控錯誤。
默認情況下,一個阿里云賬號在同一個地域下的所有函數共享上述伸縮限制。當需要限制某個函數的實例數時,您可以配置函數級按量實例伸縮控制。配置后,當此函數處于執行狀態的函數實例總數超過限制后,函數計算將返回流控錯誤。
配置預留模式實例的伸縮限制
當突發的調用量較大時,大量的實例創建會受到流控限制導致請求失敗,實例的冷啟動也會增加請求延時。為避免這些問題,您可以使用函數計算的預留實例,即提前準備好函數實例。預留實例的實例數上限和擴容速度有單獨的限制,不受上述實例伸縮限制的影響。
各地域擴容速度限制
地域 | 實例擴容速度限制-突增實例數 | 實例擴容速度限制-實例增長速度 |
華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華南1(深圳) | 300 | 300/分鐘 |
其他 | 100 | 100/分鐘 |
配置彈性伸縮規則
創建彈性伸縮規則
- 登錄函數計算控制臺,在左側導航欄,單擊服務及函數。
- 在頂部菜單欄,選擇地域,然后在服務列表頁面,單擊目標服務。
- 在函數管理頁面,單擊目標函數名稱。
在函數詳情頁面,選擇彈性管理頁簽,然后單擊創建規則。
在創建彈性伸縮限制規則頁面,設置相關配置項,然后單擊創建。
配置按量模式實例伸縮
最小實例數設置為0,最大實例數即按量實例的最大個數。如果沒有配置最大實例數,最大實例數限制將遵循您的賬號和目前所在地域的最大實例數限制。
說明閑置模式、定時修改限制、根據指標修改限制都是在預留模式下生效。
配置預留模式實例伸縮
配置項
說明
基礎配置
版本或別名
選擇需要創建預留模式實例的版本或別名。
說明僅支持在LATEST版本創建預留模式實例,其他版本暫不支持。
最小實例數
填寫預留模式的實例的個數。最小實例數=預留實例個數。
說明通過限制函數級別最小實例數來快速響應函數調用請求,降低冷啟動的發生次數,為時延敏感的在線業務提供更好的服務響應。
閑置模式
選擇啟用或關閉閑置模式,默認關閉。取值說明如下:
啟用該功能后,僅在處理請求期間為預留模式的實例分配vCPU,其余時間實例的CPU將被凍結。
開啟閑置模式時,函數計算會根據函數的單實例并發度優先將請求分配至同一個實例,直到該實例請求已滿載。假設函數的單實例并發度為50,您有10個閑置的預留實例,當函數計算同時收到40個請求時,這40個請求將都由其中1個實例處理,只有這1個實例會從閑置進入活躍狀態。
關閉該功能后,預留模式的實例無論是否正在處理請求都會分配vCPU。
最大實例數
填寫最大實例數。最大實例數=預留實例個數+按量實例的最大個數。
說明通過限制函數級別最大實例數來防止單個函數過度調用導致的實例占用,保護后端資源,避免預期外的費用開銷。
如果此配置項留空,最大實例數限制將遵循您的賬號和目前所在地域的最大實例數限制。
(可選)定時修改限制:設置定時伸縮可以更加靈活地配置預留的函數實例,將指定時間下預留的函數實例量設定為指定的值,更好地貼合業務的并發量需求。配置原理及示例請參見定時修改限制。
策略名稱
填寫自定義的策略名稱。
最小實例數
按需設置預留數量。
定時表達式(UTC)
定時信息,本文示例為cron(0 0 20 * * *)。詳細信息,請參見參數說明。
生效時間(UTC)
設置定時彈性伸縮的開始生效及結束生效時間。
(可選)根據指標修改限制:根據實例的各指標利用率或預留實例并發利用率,每分鐘對預留資源進行一次伸縮。配置原理及示例請參見根據指標修改限制。
策略名稱
填寫自定義的策略名稱。
最小實例數范圍
按需設置最小實例數的最小值和最大值。
利用率類型
僅當函數的實例類型為GPU實例時,此配置項有效。選擇根據利用率設置彈性伸縮策略的指標類型。關于GPU實例的彈性伸縮策略,請參見GPU預留模式的彈性伸縮策略。
并發利用率閾值
設置伸縮范圍。當實例的各指標利用率或預留實例并發利用率低于此配置項設置的值,則進行縮容,當實例的各指標利用率或預留實例并發利用率高于此配置項設置的值,則進行擴容。
生效時間(UTC)
設置指標彈性伸縮的開始生效及結束生效時間。
創建完成后,在規則列表,您可以看到目標函數下配置的預留模式的實例情況。
修改或刪除彈性伸縮規則
在彈性管理頁面,您可以查看創建的規則列表。您可以單擊目標規則對應的操作列的編輯或者刪除,修改或刪除相應的彈性伸縮規則。
如果需要刪除預留模式的實例,將最小實例數設置為0即可。
預留模式的彈性伸縮方式
由于預留模式配置的固定預留值會導致預留函數實例利用不充分,您可以通過定時修改限制和根據指標修改限制兩種方式解決該問題。
定時修改限制
定義:通過定時彈性伸縮您可以更加靈活地配置預留的函數實例,在指定時間將預留的函數實例量設定成需要的值,使函數實例量更好地貼合業務的并發量。
適用場景:函數有明顯的周期性規律或可預知的流量高峰。當函數調用并發大于定時預留值時,超出的部分會分配至按量模式的函數實例。
配置示例:如下圖配置兩個定時操作。在函數調用流量到來前,通過第一個定時配置將預留函數實例擴容至較大的值;當流量減小后,通過第二個定時配置將預留函數實例縮容到較小的值。
參數示例如下。為服務service_1的函數function_1配置定時伸縮,配置的生效區間為2022-11-01 10:00:00至2022-11-30 10:00:00,在每天20:00將預留函數實例擴容至50,在每天22:00再將預留函數實例收縮至10。在使用PutProvisionConfig API配置定時伸縮的請求參數可參考以下信息。
{
"ServiceName": "service_1",
"FunctionName": "function_1",
"Qualifier": "alias_1",
"ScheduledActions": [
{
"Name": "action_1",
"StartTime": "2022-11-01T10:00:00Z",
"EndTime": "2022-11-30T10:00:00Z",
"TargetValue": 50,
"ScheduleExpression": "cron(0 0 20 * * *)"
},
{
"Name": "action_2",
"StartTime": "2022-11-01T10:00:00Z",
"EndTime": "2022-11-30T10:00:00Z",
"TargetValue": 10,
"ScheduleExpression": "cron(0 0 22 * * *)"
}
]
}
參數說明如下。
參數 | 說明 |
Name | 配置的定時任務名稱。 |
StartTime | 配置開始生效的時間,UTC格式。 |
EndTime | 配置結束生效的時間,UTC格式。 |
TargetValue | 目標值。 |
ScheduleExpression | 定時信息,支持兩種格式:
|
Cron表達式(Seconds Minutes Hours Day-of-month Month Day-of-week)的字段說明如下。
表 1. 字段說明
字段名 | 取值范圍 | 允許的特殊字符 |
Seconds | 0~59 | 無 |
Minutes | 0~59 | , - * / |
Hours | 0~23 | , - * / |
Day-of-month | 1~31 | , - * ?/ |
Month | 1~12或JAN~DEC | , - * / |
Day-of-week | 1~7或MON~SUN | , - * ? |
表 2. 特殊字符說明
字符名 | 定義 | 示例 |
* | 表示任一,每一。 | 在 |
, | 表示列表值。 | 在 |
- | 表示一個范圍。 | 在 |
? | 表示不確定的值。 | 與其他指定值一起使用。例如,如果指定一個特定的日期,但您不在乎它是星期幾,那么在 |
/ | 表示一個值的增加幅度,n/m表示從n開始,每次增加m。 | 在 |
根據指標修改限制
定義:通過追蹤監控指標實現對預留模式的函數實例進行動態伸縮。
適用場景:函數計算系統周期性采集預留的函數實例并發利用率或實例的資源利用率指標,使用指標并結合您配置的擴容觸發值、縮容觸發值來控制預留模式函數實例的伸縮,使預留的函數實例量更好的貼合資源的真實使用量。
實現原理:指標追蹤彈性伸縮根據指標情況每分鐘對預留資源進行一次伸縮。
當指標超過擴容閾值時,開始以積極的策略擴容預留模式的函數實例量,最快速度將函數實例量擴容至目標值。
當指標低于縮容閾值時,開始以保守的策略縮容預留模式的函數實例量,小幅度向縮容目標值貼近。
如果在系統中設置了伸縮最大值和最小值,此時預留的函數實例量會在最大值與最小值之間進行伸縮,超出最大值時將停止擴容,低于最小值時將停止縮容。
配置示例:如下圖以預留實例利用率指標伸縮為例。
當流量不斷增加時,觸發擴容閾值,預留模式的函數實例開始擴容,當達到設置的最大值時停止擴容,超出部分的請求分配至按量模式函數實例。
當流量不斷減小時,觸發縮容閾值,預留模式的函數實例開始縮容。
預留模式函數實例的并發利用率只統計預留模式的并發情況,不包含按量模式的數據。
指標口徑:預留模式函數實例正在響應的請求并發值與所有預留函數實例最大可響應并發值的占比,數值范圍為[0,1]。
對于不同的實例并發數,預留模式的函數實例最大可響應并發值的計算邏輯如下所示。關于實例并發數的具體信息,請參見設置實例并發度。
單實例單并發:最大可響應并發值=函數實例數量
單實例多并發:最大可響應并發值=函數實例數量×單實例并發度
擴縮容目標值
根據當前指標值、指標追蹤值、當前預留模式的函數實例數、縮容系數共同決定。
擴縮容計算原理:縮容時會通過縮容系數來實現相對保守的縮容過程,縮容系數取值范圍為(0,1]。縮容系數為系統參數,用于減緩縮容速度,防止縮容過快,您無需設置。擴縮容目標值對計算結果向上取整得到最終結果,計算邏輯如下。
擴容目標值=當前預留模式的函數實例數×(當前指標值/指標追蹤值)
縮容目標值=當前預留模式的函數實例數×縮容系數×(1-當前指標值/指標追蹤值)
擴容目標值計算示例:當前指標值為80%,指標追蹤值為40%,當前預留模式的函數實例數為100,經過計算100×(80%/40%)=200。預留模式的函數實例數會擴容到200,以保證擴容后指標追蹤值維持在40%附近。
參數示例如下。為service_1的function_1函數配置指標追蹤彈性伸縮,配置的生效區間為:2022-11-01 10:00:00至2022-11-30 10:00:00,追蹤預留模式函數實例并發利用率ProvisionedConcurrencyUtilization指標,并發利用率追蹤值為60%,超過60%時開始擴容,擴容上限為100;并發利用率低于60%時開始縮容,縮容下限為10。在使用PutProvisionConfig API配置定時伸縮的請求參數可參考以下信息。
{
"ServiceName": "service_1",
"FunctionName": "function_1",
"Qualifier": "alias_1",
"TargetTrackingPolicies": [
{
"Name": "action_1",
"StartTime": "2022-11-01T10:00:00Z",
"EndTime": "2022-11-30T10:00:00Z",
"MetricType": "ProvisionedConcurrencyUtilization",
"MetricTarget": 0.6,
"MinCapacity": 10,
"MaxCapacity": 100,
}
]
}
參數說明如下。
參數 | 說明 |
Name | 配置的指標任務名稱。 |
StartTime | 配置開始生效的時間,UTC格式。 |
EndTime | 配置結束生效的時間,UTC格式。 |
MetricType | 追蹤的指標:ProvisionedConcurrencyUtilization。 |
MetricTarget | 指標的追蹤值。 |
MinCapacity | 擴容的最大值。 |
MaxCapacity | 縮容的最小值。 |