Azure Functions 進階方案
Azure Functions 彈性進階方案是函數應用程式的動態調整主控選項。 如需其他主控方案選項,請參閱主控方案一文。
重要
Azure Functions 可在 Azure App Service 平台上執行。 在 App Service 平台中,主控進階方案函數應用程式的方案稱為彈性進階方案,SKU 名稱類似 EP1
。 如果您選擇在進階方案執行函數應用程式,請務必使用以「E」開頭的 SKU 名稱來建立方案,例如 EP1
。 以「P」開頭的 App Service 方案 SKU 名稱,例如 P1V2
(進階 V2 小型方案),實際上是專用主控方案。 因為是專用而非彈性進階方案,因此 SKU 名稱開頭為「P」的方案不會動態調整,而且可能會增加您的成本。
進階方案主控為您的函式提供下列優點:
- 避免以暖執行個體進行冷啟動。
- 虛擬網路連線。
- 支援較長的執行時間持續時間。
- 進階執行個體大小的選擇。
- 相較於取用方案,更可預測定價。
- 具有多個函數應用程式之方案的高密度應用程式配置。
- 支援 Linux 容器部署。
當使用進階方案時,會根據傳入事件的數目,新增和移除 Azure Functions 主機的執行個體,就像取用方案一樣。 多個函數應用程式可以部署到相同的進階方案,而此方案可讓您設定計算執行個體大小、基底方案大小和方案大小上限。
計費
進階方案的計費是根據執行個體間配置的核心秒數和記憶體數目。 此計費與取用方案不同,這是依據每秒的資源耗用量和執行計費。 進階方案沒有執行費用。 不論函式為作用中或閒置,此計費都會對每個作用中方案產生每月最低成本。 請記住,進階方案中的所有函數應用程式都會共用配置的執行個體。 若要深入了解,請參閱 Azure Functions 價格頁面。
注意
每個進階方案隨時都有至少一個作用中 (計費) 執行個體。
建立進階方案
當您在 Azure 入口網站中建立函數應用程式時,取用方案是預設值。 若要建立在進階方案中執行的函數應用程式,您必須使用其中一個彈性進階 SKU 明確建立或選擇 Azure Functions 進階主控方案。 您建立的函數應用程式接著會裝載在此方案中。 Azure 入口網站可讓您輕鬆地同時建立進階方案和函數應用程式。 您可以在相同的進階方案中執行多個函數應用程式,但兩者必須在相同的作業系統上執行 (Windows 或 Linux)。
下列文章說明如何使用 Premium 方案以程式設計方式建立函數應用程式:
消除冷啟動
當事件或執行未在使用量方案中發生時,您的應用程式可能會調整為零個執行個體。 當新的事件出現時,在應用程式上執行的新執行個體必須特製化。 根據應用程式而定,將新的執行個體特製化可能需要一些時間。 第一次呼叫的這個額外延遲通常稱為應用程式冷啟動。
進階方案提供兩項功能,可共同運作以有效地消除函式中的冷啟動:永遠就緒的執行個體和預熱的執行個體。 永遠就緒的執行個體是不受調整影響的預先配置執行個體類別,而預熱的執行個體是因 HTTP 事件而調整的緩衝區。
當事件開始觸發應用程式時,會先路由傳送至永遠就緒的執行個體。 當函式因為 HTTP 事件變成作用中時,其他執行個體會以緩衝區的形式準備就緒。 這些緩衝執行個體稱為預熱的執行個體。 此緩衝區可減少在調整期間所需的新執行個體冷啟動。
永遠就緒的執行個體
在進階方案中,您可以讓應用程式的指定數目執行個體永遠就緒。 不論負載多寡,您的應用程式均會持續在這些執行個體上執行。 若負載超過您永遠就緒的執行個體可以處理的內容,則會視需要新增其他執行個體,最多可達到您指定的最大值。
此應用程式層級設定也會控制方案的最低執行個體數量。 例如可考慮在相同的進階方案中擁有三個函數應用程式。 若您的兩個應用程式將永遠就緒的執行個體計數設定為一,而在第三個執行個體中設定為五時,則整個方案的最小值是五。 這也反映您方案計費的執行個體數目最小值。 每個應用程式支援的永遠就緒執行個體數目上限為 20。
您可以選取函數應用程式、移至 [平台功能] 索引標籤,然後選取 [擴增] 選項,設定Azure 入口網站中永遠就緒的執行個體數目。 在函數應用程式編輯視窗中,永遠就緒的執行個體為該應用程式專屬。
預熱的執行個體
預熱的執行個體計數設定會在 HTTP 調整與啟用事件期間提供暖執行個體作為緩衝區。 預熱的執行個體會繼續緩衝處理,直到達到最大擴增限制為止。 預設預熱的執行個體計數為 1,而且在大部分情節中,此值應維持為 1。
請考慮到較不常見的案例,例如在自訂容器中執行的應用程式。 由於自訂容器需要很長的準備時間,因此可以考慮增加預熱的執行個體的緩衝區。 只有在所有作用中執行個體均在使用之後,預熱的執行個體才會變成作用中。
您也可以定義預熱觸發程序,此觸發程序會在預熱流程期間執行。 在預熱流程期間,您可使用預熱觸發程序預先載入自訂的相依性,這樣就可以在函式準備好時,立即開始處理要求。 若要深入了解,請參閱 Azure Functions 預熱觸發程序。
請考慮此範例,說明永遠就緒的執行個體和預熱的執行個體如何一起運作。 進階函數應用程式已設定兩個永遠就緒的執行個體,以及預設一個預熱的執行個體。
- 當應用程式處於閒置狀態且未觸發任何事件時,就會佈建應用程式並以兩個執行個體執行。 此時,您要支付兩個永遠就緒的執行個體費用,但無需支付預熱的執行個體費用,因為沒有配置任何預熱的執行個體。
- 當您的應用程式開始接收 HTTP 流量時,要求會在兩個永遠就緒的執行個體之間進行負載平衡。 只要這兩個執行個體開始處理事件,即會新增執行個體以填滿預熱的緩衝區。 應用程式現在以三個佈建的執行個體執行:兩個永遠就緒執行個體,以及第三個預熱且非作用中的緩衝區。 您要支付這三個執行個體的費用。
- 隨著負載增加,您的應用程式需要更多執行個體來處理 HTTP 流量,該預熱執行個體會交換至作用中的執行個體。 HTTP 負載現在會透過路由傳送至這三個執行個體,第四個執行個體會立即佈建以填滿預熱的緩衝區。
- 此調整和預熱序列會繼續執行,直到達到應用程式的執行個體計數最大值,或負載降低會導致平台在一段時間後縮小。 預熱或啟動的執行個體不能超過上限。
您無法在入口網站中變更預熱執行個體計數設定,您必須改用 Azure CLI 或Azure PowerShell。
函數應用程式執行個體上限
除了計劃高載計數上限之外,您還可以設定每個應用程式的上限。 您可以使用應用程式調整限制來設定應用程式上限。 應用程式擴增上限不可超過此方案的高載執行個體上限。
私人網路連線能力
部署至進階方案的函數應用程式可以利用 Web 應用程式的虛擬網路整合。 設定時,您的應用程式可以與虛擬網路內的資源通訊,或透過服務端點進行保護。 應用程式也可使用 IP 限制來限制連入流量。
在進階方案中將子網路指派給函數應用程式時,您需要具有每個潛在執行個體足夠 IP 位址的子網路。 我們需要具有至少 100 個可用位址的 IP 區塊。
如需詳細資訊,請參閱整合函數應用程式與虛擬網路。
快速彈性調整
系統會使用與取用方案相同的快速調整邏輯,為您的應用程式自動新增其他計算執行個體。 相同 App Service 方案中的應用程式會根據個別應用程式的需求,彼此獨立地調整。 不過,相同 App Service 方案中的函數應用程式共用 VM 資源,以協助盡可能降低成本。 與 VM 相關聯的應用程式數目取決於每個應用程式的磁碟使用量和 VM 的大小。
若要深入了解調整的運作方式,請參閱 Azure Functions 中的事件驅動調整。
執行時間較長
取用方案中 Functions 的單一執行限制為 10 分鐘。 在進階方案中,執行持續時間預設為 30 分鐘,以防止執行失控。 不過,您可以修改 host.json 設定,使進階方案應用程式的持續時間無限制,不過有下列侷限:
- 平台升級可能會觸發受控關機,並在 10 分鐘的寬限期中停止功能執行。
- 有一個閒置計時器,會在 60 分鐘後停止背景工作角色,且沒有新的執行。
- 相應縮小行為可能會導致 60 分鐘後關閉背景工作角色。
- 位置交換可以在交換期間終止來源和目標位置上的執行。
遷移
如果您具有現有的函數應用程式,您可以使用 Azure CLI 命令,在 Windows 上的使用量方案與進階方案之間,移轉函數應用程式。 特定命令相依於移轉的方向。 若要深入了解,請參閱方案移轉。
Linux 不支援此移轉。
進階方案設定
當您建立方案時,有兩個方案大小設定:執行個體數目 (或方案大小) 下限和高載限制上限。
如果您的應用程式需要執行個體超出永遠就緒的執行個體,可以繼續擴增,直到執行個體數目達到方案高載限制上限為止,或者達到應用程式擴增限制上限 (如果已設定) 為止。 只有在執行個體執行並且配置給您時,才會針對執行個體向您收費 (以秒為基礎)。 平台會盡最大努力將您的應用程式擴增到定義的上限。
您可以選取部署至該方案函數應用程式之 [設定] 下的 [擴增] 選項,在 Azure 入口網站中設定方案大小和上限。
每個「進階」方案的下限是至少一個執行個體。 根據方案中應用程式所要求的永遠就緒執行個體,為您決定實際的執行個體數目下限。 例如,如果應用程式 A 要求五個永遠就緒的執行個體,而相同方案中應用程式 B 要求兩個永遠就緒的執行個體,則方案大小下限會決定為五個。 應用程式 A 在所有 5 個執行個體上執行,而應用程式 B 只會在 2 個執行個體上執行。
重要
不論函式是否正在執行,都會針對以執行個體計數下限配置的每個執行個體向您收費。
在大部分情況下,這個自動計算的下限就已足夠。 不過,盡全力運作時會調整超過下限。 雖然不太可能,但是如果其他執行個體無法使用,在特定時間擴增還是可能會延遲。 藉由將下限設定為高於自動計算下限,您可以在擴增前保留執行個體。
您可以選取部署至該方案函數應用程式之 [設定] 下的 [擴增] 選項,在 Azure 入口網站中設定最小執行個體。
可用的執行個體 SKU
建立或調整您的方案時,您可以從三種執行個體大小中選擇。 系統會針對核心總數和佈建的記憶體、配置給您的每個執行個體的每一秒鐘向您計費。 您的應用程式可以視需要自動擴增至多個執行個體。
SKU | 核心 | 記憶體 | 儲存體 |
---|---|---|---|
EP1 | 1 | 3.5GB | 250 GB |
EP2 | 2 | 7 GB | 250 GB |
EP3 | 4 | 14 GB | 250 GB |
記憶體使用量考量
在具有更多記憶體的電腦上執行,不一定表示您的函數應用程式會使用所有可用的記憶體。
例如,JavaScript 函數應用程式受限於 Node.js 中的預設記憶體限制。 若要增加這個固定記憶體限制,請新增應用程式設定 languageWorkers:node:arguments
,具有 --max-old-space-size=<max memory in MB>
的值。
對於記憶體超過 4 GB 的方案,請確定 [一般設定] 底下的 [位元平台設定] 設定為 64 Bit
。
區域擴增上限
以下是每個區域和 OS 組態中單一方案目前支援的擴增值上限:
區域 | Windows | Linux |
---|---|---|
澳大利亞中部 | 100 | 20 |
澳大利亞中部 2 | 100 | 無法使用 |
澳大利亞東部 | 100 | 40 |
澳大利亞東南部 | 100 | 20 |
巴西南部 | 100 | 20 |
加拿大中部 | 100 | 100 |
印度中部 | 100 | 20 |
美國中部 | 100 | 100 |
中國東部 2 | 20 | 20 |
中國北部 2 | 20 | 20 |
中國北部 3 | 20 | 20 |
東亞 | 100 | 20 |
美國東部 | 100 | 100 |
美國東部 2 | 80 | 100 |
法國中部 | 100 | 60 |
德國中西部 | 100 | 20 |
以色列中部 | 100 | 20 |
義大利北部 | 100 | 20 |
日本東部 | 100 | 20 |
日本西部 | 100 | 20 |
Jio 印度西部 | 100 | 20 |
南韓中部 | 100 | 20 |
南韓南部 | 40 | 20 |
墨西哥中部 | 20 | 20 |
美國中北部 | 100 | 20 |
北歐 | 100 | 100 |
挪威東部 | 100 | 20 |
南非北部 | 100 | 20 |
南非西部 | 20 | 20 |
美國中南部 | 100 | 100 |
印度南部 | 100 | 無法使用 |
東南亞 | 100 | 20 |
西班牙中部 | 20 | 20 |
瑞士北部 | 100 | 20 |
瑞士西部 | 100 | 20 |
阿拉伯聯合大公國北部 | 100 | 20 |
英國南部 | 100 | 100 |
英國西部 | 100 | 20 |
US Gov 亞利桑那州 | 20 | 20 |
USGov Texas | 20 | 無法使用 |
USGov Virginia | 80 | 20 |
美國中西部 | 100 | 20 |
西歐 | 100 | 100 |
印度西部 | 100 | 20 |
美國西部 | 100 | 100 |
美國西部 2 | 100 | 20 |
美國西部 3 | 100 | 20 |
如需詳細資訊,請參閱 Azure Functions 的完整區域可用性。