全部產品
Search
文件中心

Function Compute:彈性管理(含預留模式)

更新時間:Jul 06, 2024

Function Compute為您提供按量模式和預留模式兩種執行個體使用模式。您可以根據兩種模式對應的執行個體總數及執行個體擴容速度的限制資訊配置對應的Auto Scaling規則。在預留模式下,您可以通過定時修改限制和根據指標修改限制兩種方式解決預留執行個體利用不充分的問題。

執行個體伸縮限制

配置按量模式執行個體的伸縮限制

在處理函數調用請求時,Function Compute會優先使用已有的可用執行個體。若當前執行個體已經滿載,Function Compute會建立新的執行個體來處理請求。隨著調用請求量的增加,Function Compute會持續建立新的執行個體,直到有足夠的執行個體處理請求或者達到您設定的執行個體數上限。在執行個體擴容的過程中,將受到以下限制。

  • 處於執行狀態的執行個體總數,預設限制為每個地區300個。

  • 處於執行狀態的執行個體數的擴容速度,受突增執行個體數和執行個體增長速度的限制。不同地區的限制條件,請參見各地區擴容速度限制

    • 突增執行個體數:可立即建立的執行個體數,預設限制為100~300個。

    • 執行個體增長速度:超過突增執行個體數後每分鐘可增加的執行個體數,預設限制為100~300個。

當執行個體總數或者執行個體擴容速度超過限制後,Function Compute將返迴流控錯誤(HTTP Status429)。下圖展示在一個調用量快速增長的情境下,Function Compute的流控行為。dg_fc_throttling_behaviors

  • 圖示中①:在達到突增執行個體數前,Function Compute立即建立執行個體,這個過程中有冷啟動,但沒有流控錯誤。

  • 圖示中②:達到突增執行個體數後,執行個體數的增長受速度限制,部分請求會收到流控錯誤。

  • 圖示中③:執行個體數超過限制後,部分請求收到流控錯誤。

預設情況下,一個阿里雲帳號在同一個地區下的所有函數共用上述伸縮限制。當需要限制某個函數的執行個體數時,您可以配置函數級按量執行個體伸縮控制。配置後,當此函數處於執行狀態的函數執行個體總數超過限制後,Function Compute將返迴流控錯誤。

配置預留模式執行個體的伸縮限制

當突發的調用量較大時,大量的執行個體建立會受到流控限制導致請求失敗,執行個體的冷啟動也會增加請求延時。為避免這些問題,您可以使用Function Compute的預留執行個體,即提前準備好函數執行個體。預留執行個體的執行個體數上限和擴容速度有單獨的限制,不受上述執行個體伸縮限制的影響。

  • 預留執行個體總數:預設每個地區300個。

  • 預留執行個體擴容速度:預設每分鐘100~300個執行個體,不同地區的限制不同。具體資訊,請參見各地區擴容速度限制。下圖展示和上面相同的負載情境下,使用預留執行個體後Function Compute的流控行為。dg_fc_ throttling_behaviors_with_provisioned_instances

    • 圖示中①:在預留執行個體被用滿之前,請求立即被執行,這個過程既沒有冷啟動,也沒有流控錯誤。

    • 圖示中②:在預留執行個體被用滿後,按量執行個體達到突增執行個體數之前,Function Compute立即建立執行個體,這個過程中有冷啟動,但沒有流控錯誤。

各地區擴容速度限制

地區

執行個體擴容速度限制-突增執行個體數

執行個體擴容速度限制-執行個體增長速度

華東1(杭州)、華東2(上海)、華北2(北京)、華北3(張家口)、華南1(深圳)

300

300/分鐘

其他

100

100/分鐘

說明
  • 相同地區下,預留模式和按量模式的擴容速度限制一致。

  • 如果您對彈性速度有更高的需求,請加入DingTalk使用者群(DingTalk群號64970014484)申請。

  • GPU執行個體的擴容速度小於彈性執行個體,建議配合預留模式使用。

配置Auto Scaling規則

建立Auto Scaling規則

  1. 登入Function Compute控制台,在左側導覽列,單擊服務及函數
  2. 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
  3. 函數管理頁面,單擊目標函數名稱。
  4. 函數詳情頁面,選擇彈性管理頁簽,然後單擊建立規則

  5. 在建立Auto Scaling限制規則頁面,設定相關配置項,然後單擊建立

    • 配置按量模式執行個體伸縮

      最小執行個體數設定為0,最大執行個體數即按量執行個體的最大個數。如果沒有配置最大執行個體數,最大執行個體數限制將遵循您的帳號和目前所在地區的最大執行個體數限制。

      說明

      閑置模式定時修改限制根據指標修改限制都是在預留模式下生效。

    • 配置預留模式執行個體伸縮

      配置項

      說明

      基礎配置

      版本或別名

      選擇需要建立預留模式執行個體的版本或別名。

      說明

      僅支援在LATEST版本建立預留模式執行個體,其他版本暫不支援。

      最小執行個體數

      填寫預留模式的執行個體的個數。最小執行個體數=預留執行個體個數。

      說明

      通過限制函數層級最小執行個體數來快速響應函數調用請求,降低冷啟動的發生次數,為時延敏感的線上業務提供更好的服務響應。

      閑置模式

      選擇啟用或關閉閑置模式,預設關閉。取值說明如下:

      • 啟用該功能後,僅在處理請求期間為預留模式的執行個體分配vCPU,其餘時間執行個體的CPU將被凍結。

        開啟閑置模式時,Function Compute會根據函數的單一實例並發度優先將請求分配至同一個執行個體,直到該執行個體請求已滿載。假設函數的單一實例並發度為50,您有10個閑置的預留執行個體,當Function Compute同時收到40個請求時,這40個請求將都由其中1個執行個體處理,只有這1個執行個體會從閑置進入活躍狀態。

      • 關閉該功能後,預留模式的執行個體無論是否正在處理請求都會分配vCPU。

      最大執行個體數

      填寫最大執行個體數。最大執行個體數=預留執行個體個數+按量執行個體的最大個數。

      說明
      • 通過限制函數層級最大執行個體數來防止單個函數過度調用導致的執行個體佔用,保護後端資源,避免預期外的費用開銷。

      • 如果此配置項留空,最大執行個體數限制將遵循您的帳號和目前所在地區的最大執行個體數限制。

      (可選)定時修改限制:設定定時伸縮可以更加靈活地配置預留的函數執行個體,將指定時間下預留的函數執行個體量設定為指定的值,更好地貼合業務的並發量需求。配置原理及樣本請參見定時修改限制

      策略名稱稱

      填寫自訂的策略名稱稱。

      最小執行個體數

      按需設定預留數量。

      定時運算式(UTC)

      定時資訊,本文樣本為cron(0 0 20 * * *)。詳細資料,請參見參數說明

      生效時間(UTC)

      設定定時Auto Scaling的開始生效及結束生效時間。

      (可選)根據指標修改限制:根據執行個體的各指標利用率或預留執行個體並發利用率,每分鐘對預留資源進行一次伸縮。配置原理及樣本請參見根據指標修改限制

      策略名稱稱

      填寫自訂的策略名稱稱。

      最小執行個體數範圍

      按需設定最小執行個體數的最小值和最大值。

      利用率類型

      僅當函數的執行個體類型為GPU執行個體時,此配置項有效。選擇根據利用率設定Auto Scaling策略的指標類型。關於GPU執行個體的Auto Scaling策略,請參見GPU預留模式的Auto Scaling策略

      並發利用率閾值

      設定伸縮範圍。當執行個體的各指標利用率或預留執行個體並發利用率低於此配置項設定的值,則進行縮容,當執行個體的各指標利用率或預留執行個體並發利用率高於此配置項設定的值,則進行擴容。

      生效時間(UTC)

      設定指標Auto Scaling的開始生效及結束生效時間。

建立完成後,在規則列表,您可以看到目標函數下配置的預留模式的執行個體情況。

修改或刪除Auto Scaling規則

彈性管理頁面,您可以查看建立的規則列表。您可以單擊目標規則對應的操作列的編輯或者刪除,修改或刪除相應的Auto Scaling規則。

說明

如果需要刪除預留模式的執行個體,將最小執行個體數設定為0即可。

預留模式的Auto Scaling方式

由於預留模式配置的固定預留值會導致預留函數執行個體利用不充分,您可以通過定時修改限制和根據指標修改限制兩種方式解決該問題。

定時修改限制

  • 定義:通過定時Auto Scaling您可以更加靈活地配置預留的函數執行個體,在指定時間將預留的函數執行個體量設定成需要的值,使函數執行個體量更好地貼合業務的並發量。

  • 適用情境:函數有明顯的周期性規律或可預知的流量高峰。當函數調用並發大於定時預留值時,超出的部分會分配至按量模式的函數執行個體。

  • 配置樣本:如下圖配置兩個定時操作。在函數調用流量到來前,通過第一個定時配置將預留函數執行個體擴容至較大的值;當流量減小後,通過第二個定時配置將預留函數執行個體縮容到較小的值。instance

參數樣本如下。為服務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

定時資訊,支援兩種格式:

  • At expressions - "at(yyyy-mm-ddThh:mm:ss)":只調度一次,使用UTC格式。如:北京時間04月01日20:00開始調度,轉換為UTC時間就是04月01日12:00開始調度,則可以使用at(2021-04-01T12:00:00)

  • Cron expressions - "cron(0 0 4 * * *)":調度多次,使用標準crontab格式,預設以UTC時間運行,即北京時間減去8個小時。如:北京時間每天20:00點進行調度,轉化為UTC時間就是每天12:00進行調度,則可以使用cron(0 0 12 * * *)

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分鐘執行。

根據指標修改限制

  • 定義:通過追蹤監控指標實現對預留模式的函數執行個體進行動態伸縮。

  • 適用情境:Function Compute系統周期性採集預留的函數執行個體並發利用率或執行個體的資源使用率指標,使用指標並結合您配置的擴容觸發值、縮容觸發值來控制預留模式函數執行個體的伸縮,使預留的函數執行個體量更好的貼合資源的真實使用量。

  • 實現原理:指標追蹤Auto Scaling根據指標情況每分鐘對預留資源進行一次伸縮。

    • 當指標超過擴容閾值時,開始以積極的策略擴容預留模式的函數執行個體量,最快速度將函數執行個體量擴容至目標值。

    • 當指標低於縮容閾值時,開始以保守的策略縮容預留模式的函數執行個體量,小幅度向縮容目標值貼近。

    如果在系統中設定了伸縮最大值和最小值,此時預留的函數執行個體量會在最大值與最小值之間進行伸縮,超出最大值時將停止擴容,低於最小值時將停止縮容。

  • 配置樣本:如下圖以預留執行個體利用率指標伸縮為例。

    • 當流量不斷增加時,觸發擴容閾值,預留模式的函數執行個體開始擴容,當達到設定的最大值時停止擴容,超出部分的請求分配至按量模式函數執行個體。

    • 當流量不斷減小時,觸發縮容閾值,預留模式的函數執行個體開始縮容。

    instance

預留模式函數執行個體的並發利用率只統計預留模式的並發情況,不包含按量模式的資料。

指標口徑:預留模式函數執行個體正在響應的請求並發值與所有預留函數執行個體最大可響應並發值的佔比,數值範圍為[0,1]。

對於不同的執行個體並發數,預留模式的函數執行個體最大可響應並發值的計算邏輯如下所示。關於執行個體並發數的具體資訊,請參見設定執行個體並發度

  • 單一實例單並發:最大可響應並發值=函數執行個體數量

  • 單一實例多並發:最大可響應並發值=函數執行個體數量×單一實例並發度

擴縮容目標值

  • 根據當前指標值、指標追蹤值、當前預留模式的函數執行個體數、縮容係數共同決定。

  • 擴縮容計算原理:縮容時會通過縮容係數來實現相對保守的縮容過程,縮容係數取值範圍為(0,1]。縮容係數為系統參數,用於減緩縮容速度,防止縮容過快,您無需設定。擴縮容目標值對計算結果向上取整得到最終結果,計算邏輯如下。

    • 擴容目標值=當前預留模式的函數執行個體數×(當前指標值/指標追蹤值)

    • 縮容目標值=當前預留模式的函數執行個體數×縮容係數×(1-當前指標值/指標追蹤值)

  • 擴容目標值計算樣本:當前指標值為80%,指標追蹤值為40%,當前預留模式的函數執行個體數為100,經過計算100×(80%/40%)=200。預留模式的函數執行個體數會擴容到200,以保證擴容後指標追蹤值維持在40%附近。

參數樣本如下。為service_1的function_1函數配置指標追蹤Auto Scaling,配置的生效區間為: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

縮容的最小值。

相關文檔

  • 按量模式和預留模式的基本概念及計費方式:執行個體類型及使用模式

  • 配置預留模式的Auto Scaling後,如果您想快速查看函數執行實際佔用的預留執行個體數,可以查看函數維度函數預留執行個體數指標資訊:函數維度指標