Azure Functions 進階方案

Azure Functions 彈性進階方案是函數應用程式的動態調整主控選項。 如需其他主控方案選項,請參閱主控方案一文

重要

Azure Functions 可在 Azure App Service 平台上執行。 在 App Service 平台中,主控進階方案函數應用程式的方案稱為彈性進階方案,SKU 名稱類似 EP1。 如果您選擇在進階方案執行函數應用程式,請務必使用以「E」開頭的 SKU 名稱來建立方案,例如 EP1。 以「P」開頭的 App Service 方案 SKU 名稱,例如 P1V2 (進階 V2 小型方案),實際上是專用主控方案。 因為是專用而非彈性進階方案,因此 SKU 名稱開頭為「P」的方案不會動態調整,而且可能會增加您的成本。

進階方案主控為您的函式提供下列優點:

當使用進階方案時,會根據傳入事件的數目,新增和移除 Azure Functions 主機的執行個體,就像取用方案一樣。 多個函數應用程式可以部署到相同的進階方案,而此方案可讓您設定計算執行個體大小、基底方案大小和方案大小上限。

計費

進階方案的計費是以跨執行個體配置的核心數目和記憶體為基礎。 此計費與取用方案不同,這是依據每秒的資源耗用量和執行計費。 進階方案沒有執行費用。 不論函式為作用中或閒置,此計費都會對每個作用中方案產生每月最低成本。 請記住,進階方案中的所有函數應用程式都會共用配置的執行個體。 若要深入了解,請參閱 Azure Functions 價格頁面

注意

每個進階方案隨時都有至少一個作用中 (計費) 執行個體。

建立進階方案

當您在 Azure 入口網站中建立函數應用程式時,取用方案是預設值。 若要建立在進階方案中執行的函數應用程式,您必須使用其中一個彈性進階 SKU 明確建立或選擇 Azure Functions 進階主控方案。 您建立的函數應用程式接著會裝載在此方案中。 Azure 入口網站可讓您輕鬆地同時建立進階方案和函數應用程式。 您可以在相同的進階方案中執行多個函數應用程式,但兩者必須在相同的作業系統上執行 (Windows 或 Linux)。

下列文章示範如何以程式設計方式或在 Azure 入口網站中使用進階方案建立函數應用程式:

消除冷啟動

當事件或執行未在取用方案中發生時,您的應用程式可能會調整為零個執行個體。 當新的事件出現時,在應用程式上執行的新執行個體必須特製化。 根據應用程式而定,將新的執行個體特製化可能需要一些時間。 第一次呼叫的這個額外延遲通常稱為應用程式冷啟動。

進階方案提供兩項功能,可共同運作以有效地消除函式中的冷啟動:永遠就緒的執行個體預熱的執行個體。 永遠就緒的執行個體是一些不受調整影響的預先配置執行個體,而預熱執行個體是因 HTTP 事件而調整的緩衝區。

當事件開始觸發應用程式時,會先路由傳送至永遠就緒的執行個體。 當函數因為 HTTP 事件變成作用中時,其他執行個體會以緩衝區的形式準備就緒。 這些緩衝執行個體稱為預熱的執行個體。 此緩衝區可減少在調整期間所需的新執行個體冷啟動。

永遠就緒的執行個體

在進階方案中,您可以讓應用程式的指定數目執行個體永遠就緒。 不論負載多寡,您的應用程式均會持續在這些執行個體上執行。 若負載超過您永遠就緒執行個體可以處理的內容,則會視需要新增其他執行個體,最多可達到您指定的最大值。

此應用程式層級設定也會控制方案的最低執行個體數量。 例如可考慮在相同的進階方案中擁有三個函數應用程式。 若您的兩個應用程式一律設為一,而第三個應用程式設為五時,則整個方案的最小值是五個。 這也反映您方案計費的執行個體數目最小值。 每個應用程式支援的永遠就緒執行個體數目上限為 20。

您可以選取函數應用程式、移至 [平台功能] 索引標籤,然後選取 [擴增] 選項,設定Azure 入口網站中永遠就緒的執行個體數目。 在函數應用程式編輯視窗中,永遠就緒的執行個體為該應用程式專屬。

入口網站中的彈性調整設定

預熱的執行個體

預熱執行個體計數設定會在 HTTP 調整與啟用事件期間提供暖執行個體作為緩衝區。 預熱的執行個體會繼續緩衝處理,直到達到最大擴增限制為止。 預設預熱的執行個體計數為 1,而且在大部分情況下,此值應維持為 1。

請考慮到較不常見的案例,例如在自訂容器中執行的應用程式。 由於自訂容器需要很長的準備時間,因此可以考慮增加預熱執行個體的緩衝區。 只有在所有作用中執行個體均在使用之後,預熱的執行個體才會變成作用中。

您也可以定義預熱觸發程序,此觸發程序會在預熱流程期間執行。 在預先準備流程期間,您可使用準備觸發程序預先載入自訂的相依性,這樣就可以在函數準備好時立即開始處理要求。 若要深入了解,請參閱 Azure Functions 預熱觸發程序

請考慮此範例,說明永遠就緒的執行個體和預熱的執行個體如何一起運作。 進階函數應用程式已設定兩個永遠就緒的執行個體,以及預設一個預熱的執行個體。

擴增圖表

  1. 當應用程式處於閒置狀態且未觸發任何事件時,就會佈建應用程式並以兩個執行個體執行。 此時,您要支付兩個永遠就緒的執行個體費用,但無需支付預熱的執行個體費用,因為沒有配置任何預熱的執行個體。
  2. 當您的應用程式開始接收 HTTP 流量時,要求將會在兩個永遠就緒執行個體之間進行負載平衡。 只要這兩個執行個體開始處理事件,即會新增執行個體以填滿預熱的緩衝區。 應用程式現在以三個佈建的執行個體執行:兩個永遠就緒執行個體,以及第三個預熱且非作用中的緩衝區。 您要支付這三個執行個體的費用。
  3. 隨著負載增加,您的應用程式需要更多執行個體來處理 HTTP 流量,該預熱執行個體會交換至作用中的執行個體。 HTTP 負載現在會透過路由傳送至這三個執行個體,第四個執行個體會立即佈建以填滿預熱的緩衝區。
  4. 此調整和預熱序列會繼續執行,直到達到應用程式的執行個體計數最大值,或負載降低會導致平台在一段時間後縮小。 預熱或啟動的執行個體不能超過上限。

您無法在入口網站中變更預熱執行個體計數設定,您必須改用 Azure CLI 或Azure PowerShell。

函數應用程式執行個體上限

除了計劃執行個體計數上限之外,您還可以設定每個應用程式的上限。 您可以使用應用程式調整限制來設定應用程式上限。

私人網路連線能力

部署至進階方案的函數應用程式可以利用 Web 應用程式的 VNet 整合。 設定時,您的應用程式可以與 VNet 內的資源通訊,或透過服務端點進行保護。 應用程式也可使用 IP 限制來限制連入流量。

在進階方案中將子網路指派給函數應用程式時,您需要具有每個潛在執行個體足夠 IP 位址的子網路。 我們需要具有至少 100 個可用位址的 IP 區塊。

如需詳細資訊,請參閱整合函數應用程式與 VNet

快速彈性調整

系統會使用與取用方案相同的快速調整邏輯,為您的應用程式自動新增額外的計算執行個體。 相同 App Service 方案中的應用程式會根據個別應用程式的需求,彼此獨立地調整。 不過,相同 App Service 方案中的函數應用程式共用 VM 資源,以協助盡可能降低成本。 與 VM 相關聯的應用程式數目取決於每個應用程式的磁碟使用量和 VM 的大小。

若要深入了解調整的運作方式,請參閱 Azure Functions 中的事件驅動調整

執行時間較長

取用方案中 Functions 的單一執行限制為 10 分鐘。 在進階方案中,執行持續時間預設為 30 分鐘,以防止執行失控。 不過,您可以修改 host.json 設定,使進階方案應用程式的持續時間無限制,不過有下列侷限:

  • 平台升級可以觸發受控關機,並停止函數執行。
  • 平台中斷會導致未處理的關機,並停止函數執行。
  • 有一個閒置計時器,會在 60 分鐘後停止背景工作角色,且沒有新的執行。
  • 相應縮小行為可能會導致 60 分鐘後關閉背景工作角色。
  • 位置交換可以在交換期間終止來源和目標位置上的執行。

遷移

如果您具有現有的函數應用程式,您可以使用 Azure CLI 命令,在 Windows 上的使用量方案與進階方案之間,移轉函數應用程式。 特定命令相依於移轉的方向。 若要深入了解,請參閱方案移轉

Linux 不支援此移轉。

方案和 SKU 設定

當您建立方案時,有兩個方案大小設定:執行個體數目 (或方案大小) 下限和高載限制上限。

如果您的應用程式需要執行個體超出永遠就緒的執行個體,可以繼續擴增,直到執行個體數目達到高載限制上限為止。 只有在執行個體執行並且配置給您時,才會針對超出方案大小的執行個體向您收費 (以秒為基礎)。 平台會盡最大努力將您的應用程式擴增到定義的上限。

您可以選取部署至該方案函數應用程式之 [設定] 下的 [擴增] 選項,在 Azure 入口網站中設定方案大小和上限。

入口網站中的彈性方案大小設定

每個方案的下限是至少一個執行個體。 根據方案中應用程式所要求的永遠就緒執行個體,將會為您自動設定實際的執行個體數目下限。 例如,如果應用程式 A 要求五個永遠就緒的執行個體,而相同方案中應用程式 B 要求兩個永遠就緒的執行個體,則方案大小下限會計算為五個。 應用程式 A 將會在所有 5 個執行個體上執行,而應用程式 B 只會在 2 個執行個體上執行。

重要

不論函式是否正在執行,都會針對以執行個體計數下限配置的每個執行個體向您收費。

在大部分情況下,這個自動計算的下限就已足夠。 不過,盡全力運作時會調整超過下限。 雖然不太可能,但是如果額外的執行個體無法使用,在特定時間擴增還是可能會延遲。 藉由將下限設定為高於自動計算下限,您可以在擴增前保留執行個體。

您可以選取部署至該方案函數應用程式之 [設定] 下的 [擴增] 選項,在 Azure 入口網站中設定最小執行個體。

入口網站中的最小執行個體設定

可用的執行個體 SKU

建立或調整方案時,您可以在三個執行個體大小之間做選擇。 系統會針對核心總數和佈建的記憶體、配置給您的每個執行個體的每一秒鐘,向您計費。 您的應用程式可以視需要自動擴增到多個執行個體。

SKU 核心 記憶體 儲存體
EP1 1 3.5GB 250GB
EP2 2 7 GB 250GB
EP3 4 14 GB 250GB

記憶體使用量考量

在具有更多記憶體的電腦上執行,不一定表示您的函數應用程式會使用所有可用的記憶體。

例如,JavaScript 函數應用程式受限於 Node.js 中的預設記憶體限制。 若要增加這個固定記憶體限制,請新增應用程式設定 languageWorkers:node:arguments,具有 --max-old-space-size=<max memory in MB> 的值。

對於記憶體超過 4 GB 的方案,請確定 [一般設定] 底下的 [位元平台設定] 設定為 64 Bit

區域擴增上限

以下是每個區域和 OS 組態中單一方案目前支援的擴增值上限。

請參閱 Azure 網站上的 Functions 完整區域可用性。

區域 Windows Linux
澳大利亞中部 100 無法使用
澳大利亞中部 2 100 無法使用
澳大利亞東部 100 40
澳大利亞東南部 100 20
巴西南部 100 20
加拿大中部 100 20
印度中部 100 20
美國中部 100 100
中國東部 2 100 20
中國北部 2 100 20
東亞 100 20
美國東部 100 100
美國東部 2 100 100
法國中部 100 60
德國中西部 100 20
日本東部 100 20
日本西部 100 20
Jio 印度西部 100 20
南韓中部 100 20
南韓南部 無法使用 20
美國中北部 100 20
北歐 100 100
挪威東部 100 20
南非北部 100 20
美國中南部 100 100
印度南部 100 無法使用
東南亞 100 20
瑞士北部 100 20
瑞士西部 100 20
阿拉伯聯合大公國北部 100 20
英國南部 100 100
英國西部 100 20
美國政府亞利桑那州 100 20
美國政府德克薩斯州 100 無法使用
美國政府維吉尼亞州 100 20
美國中西部 100 20
西歐 100 100
印度西部 100 20
美國西部 100 100
美國西部 2 100 20
美國西部 3 100 20

後續步驟