本文介紹函數級按量執行個體伸縮控制的背景資訊、應用情境、使用限制、使用說明以及TPS計算公式。
背景資訊
為了防止過度調用函數導致費用失控,每個帳號在當前地區中按量執行個體數存在限制,該限制為帳號層級限制,所有函數共用按量執行個體數的最大限制值。例如,帳號164901546557****在某地區的按量執行個體數上限為300,該帳號下有3個函數function-a、function-b、function-c。在某一時刻所有正在處理調用的函數按量執行個體數之和最大為300。
除了帳號層級的執行個體數限制,Function Compute為函數的調用提供了更細粒度的按量調用執行個體數限制,您可以通過控制台或API設定函數層級執行個體限制數來防止單個函數過度調用導致的執行個體佔用,保護後端資源,避免預期外的費用開銷。例如,帳號164901546557****下有函數function-a、function-b、function-c。您可以為函數function-a設定按量執行個體數上限10,調用函數function-a時最多隻能佔用10個執行個體。
應用情境
- 保護函數的正常並發度。
例如,有function-a、function-b兩個函數共用帳號層級執行個體限制數,其中function-a是需要保護的重點業務函數,而function-b有可能被過度調用而影響function-a的正常請求。此時,可以單獨為function-b設定執行個體限制防止function-b搶佔大量的按量執行個體數,使function-a分配不到足夠的執行個體。
- 保護下遊服務。
例如,在Function Compute中需要大量訪問RDS資料庫,由於資料庫處理能力有限,您需要保護RDS不被打垮,您可以為訪問RDS的函數設定執行個體限制。
- 禁止異常函數調用。
例如,如果發現某個函數調用異常,可以設定最大函數執行個體數為0,禁止其調用。
- 防止過度調用函數。
例如,瀏覽器端或用戶端使用者的操作行為不受控制,設定函數級執行個體數限制可以防止調用失控而產生意外費用。
- 配合預留模式使用。
通過設定函數級按量模式執行個體數限制,配合預留模式執行個體數,您可以只使用預留模式執行個體、只使用按量模式執行個體或混合使用以上兩種模式的執行個體。
設定函數級按量執行個體限制後的調用行為
調用類型 | 調用行為 |
同步調用 | 函數調用所需要佔用的執行個體數超過所設定的值後,超出的請求會被拒絕,並收到ResourceExhausted 流控錯誤。 |
非同步呼叫 | 函數調用所需要佔用的執行個體數超過所設定的值後,請求不會被拒絕,請求會在隊列裡以所有執行個體滿負荷執行的速度逐漸被消費。 |
更多資訊,請參見函數調用。
函數級按量執行個體與預留模式執行個體的配合使用
如果您給指定的函數分配了預留模式執行個體資源,則優先使用預留資源,在預留資源用滿的情況下,再使用按量執行個體資源。按量執行個體資源與預留資源配合使用樣本如下。
按量模式執行個體限制 | 預留模式執行個體限制 | 資源使用方式 |
0 | 10 | 不使用按量模式執行個體,只使用預留模式執行個體,最多可用10個預留模式執行個體。 當前預留模式執行個體不足以支撐並發請求時,新請求會被流控,收到429錯誤。 |
20 | 0 | 不使用預留模式執行個體,只使用按量模式執行個體,最多可用20個按量模式執行個體。 |
50 | 30 | 優先使用30個預留模式執行個體,用滿後再使用按量模式執行個體,最多使用50個按量模式執行個體,總共最多使用80個執行個體資源。 |
使用限制
- 每個帳號在當前地區下最多設定100條函數級按量執行個體數限制規則,每條限制規則的執行個體限制值不得超過帳號層級執行個體限制值300。
- 函數級按量執行個體數限制規則必須設定在指定別名或LATEST版本之上,可以針對函數的多個不同別名設定不同的執行個體限制。
TPS計算公式
TPS指一秒鐘內一個函數所能處理的請求數目。您可以結合TPS和您的業務需求,設定函數按量執行個體數。
TPS的計算公式為:TPS = 1 / DurationInSecond × InstanceConcurrency × MaxInstances
假設一個函數執行平均時間長度(DurationInSecond)為0.1s,該函數的按量執行個體數上限(MaxInstances)為5。如果單個執行個體並發度(InstanceConcurrency)為2,那麼這5個函數執行個體每秒能處理100個(1/0.1× 2 × 5)這樣的請求,即TPS為100。
更多資訊
關於如何建立函數級按量執行個體數,請參見彈性管理(含預留模式)。