預留模式通過預留適量函數執行個體來響應函數調用請求,降低冷啟動的發生次數,為時延敏感的線上業務提供更好的服務響應。由於預留模式配置的固定預留值會導致預留函數執行個體利用不充分,您可以通過定時Auto Scaling和指標追蹤Auto Scaling兩種模式解決該問題。
定時Auto Scaling
定義:通過定時Auto Scaling您可以更加靈活地配置預留的函數執行個體,在指定時間將預留的函數執行個體量設定成需要的值,使函數執行個體量更好地貼合業務的並發量。
適用情境:如果您的函數有明顯的周期性規律或可預知的流量高峰,可以使用定時預留功能來提前預留函數執行個體。當函數調用並發大於定時預留值時,超出的部分會分配至按量模式的函數執行個體。
配置樣本:如下圖配置了兩個定時操作,在函數調用流量到來前,通過第一個定時配置將預留函數執行個體擴容至較大的值,當流量減小後,通過第二個定時配置將預留函數執行個體縮容到較小的值。

參數樣本:
為service_1的function_1函數配置定時伸縮,配置的生效區間為:2020-11-01 10:00:00至2020-11-30 10:00:00,在每天20:00將預留函數執行個體擴容至50,在每天22:00再將預留函數執行個體收縮至10。
{ "ServiceName": "service_1", "FunctionName": "function_1", "Qualifier": "alias_1", "SchedulerActions": [ { "Name": "action_1", "StartTime": "2020-11-01T10:00:00Z", "EndTime": "2020-11-30T10:00:00Z", "TargetValue": 50, "ScheduleExpression": "cron(0 0 20 * * *)" }, { "Name": "action_2", "StartTime": "2020-11-01T10:00:00Z", "EndTime": "2020-11-30T10:00:00Z", "TargetValue": 10, "ScheduleExpression": "cron(0 0 22 * * *)" } ] }參數說明
參數
說明
Schema
Name
配置的定時任務名稱。
string
StartTime
配置開始生效的時間,UTC格式。
string
EndTime
配置結束生效的時間,UTC格式。
string
TargetValue
目標值。
integer(int64)
ScheduleExpression
定時資訊,支援兩種格式:
At expressions - "at(yyyy-mm-ddThh:mm:ss)":只調度一次,使用UTC格式。
Cron expressions - "cron(0 0 20 * * *)":調度多次,使用標準crontab格式,如:每天20:00進行調度。
string
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. 特殊字元說明 字元名
定義
樣本
*
表示任一,每一。
在
Minutes欄位中:0表示每分鐘的0秒都執行。,
表示列表值。
在
Day-of-week欄位中:MON,WED,FRI表示星期一、星期三和星期五。-
表示一個範圍。
在
Hours欄位中:10-12表示UTC時間從10點到12點。?
表示不確定的值。
與其他指定值一起使用。例如,如果指定了一個特定的日期,但您不在乎它是星期幾,那麼在
Day-of-week欄位中就可以使用。/
表示一個值的增加幅度,n/m表示從n開始,每次增加m。
在
minute欄位中:3/5表示從3分鐘開始,每隔5分鐘執行。
指標追蹤Auto Scaling
定義:通過追蹤監控指標實現對預留模式的函數執行個體進行動態伸縮。
適用情境:Function Compute系統周期性採集預留的函數執行個體並發利用率指標,使用該指標並結合您配置的擴容觸發值、縮容觸發值來控制預留模式函數執行個體的伸縮,使預留的函數執行個體量更好地貼合資源的真實使用量。
實現原理:指標追蹤Auto Scaling根據指標情況每分鐘對預留資源進行一次伸縮。
當指標超過擴容閾值時,開始以積極的策略擴容預留模式的函數執行個體量,最快速度將函數執行個體量擴容至目標值。
當指標低於縮容閾值時,開始以保守的策略縮容預留模式的函數執行個體量,小幅度向縮容目標值貼近。
如果在系統中設定了伸縮最大值和最小值,此時預留的函數執行個體量會在最大值與最小值之間進行伸縮,超出最大值時將停止擴容,低於最小值時將停止縮容。
配置樣本:

當流量不斷增加時,觸發擴容閾值80%,預留模式的函數執行個體開始擴容,當達到最大值100時停止擴容,超出部分的請求分配至按量模式函數執行個體。
當流量不斷減小時,觸發縮容閾值60%,預留模式的函數執行個體開始縮容。
預留模式函數執行個體的並發利用率只統計預留模式的並發情況,不包含按量模式的資料。指標口徑:預留模式函數執行個體正在響應的請求並發值與所有預留函數執行個體最大可響應並發值的佔比,數值範圍為[0,1]。對於不同的執行個體並發度,預留模式的函數執行個體最大可響應並發值的計算邏輯如下:
單一實例單並發:最大可響應並發值=函數執行個體數量
單一實例多並發:最大可響應並發值=函數執行個體數量*單一實例並發度
擴縮容目標值:
根據當前指標值、擴縮容閾值、當前預留函數執行個體數、縮容係數共同決定。
擴縮容計算原理:縮容時會通過縮容係數(系統參數,您無需設定)來實現相對保守的縮容過程,縮容係數取值範圍為(0,1]。擴縮容目標值對計算結果向上取整得到最終結果,計算邏輯如下:
擴容目標值=(當前指標值/擴容閾值)*當前預留模式的函數執行個體數
縮容比例=(1-當前指標值/縮容閾值)*縮容係數
縮容目標值=當前執行個體數*(1-縮容比例)
擴縮容目標值計算樣本:當前指標90%,擴容閾值80%,當前預留函數執行個體數為100,經過計算(90%/80%)*100=112.5向上取整得到113,預留模式的函數執行個體數會擴容到113。
參數樣本:
為service_1的function_1函數配置指標追蹤Auto Scaling,配置的生效區間為:2020-11-01 10:00:00至2020-11-30 10:00:00,追蹤預留模式函數執行個體並發利用率ProvisionedConcurrencyUtilization指標,並發利用率追蹤值為60%,超過60%時開始擴容,擴容上限為100;並發利用率低於60%時開始縮容,縮容下限為10。
{ "ServiceName": "service_1", "FunctionName": "function_1", "Qualifier": "alias_1", "TargetTrackingPolicies": [ { "Name": "action_1", "StartTime": "2020-11-01T10:00:00Z", "EndTime": "2020-11-30T10:00:00Z", "MetricType": "ProvisionedConcurrencyUtilization", "MetricTarget": 0.6, "MinCapacity": 10, "MaxCapacity": 100, } ] }參數說明:
參數
說明
Schema
Name
配置的定時任務名稱。
string
StartTime
配置開始生效的時間,UTC格式。
string
EndTime
配置結束生效的時間,UTC格式。
string
MetricType
追蹤的指標:ProvisionedConcurrencyUtilization。
string
MetricTarget
指標的追蹤值。
double
MinCapacity
擴容的最大值。
integer(int64)
MaxCapacity
縮容的最小值。
integer(int64)