預估以使用量為基礎的成本
本文說明如何預估彈性耗用量和取用主控方案的方案成本。
Azure Functions 目前會為您的函式應用程式提供這些不同的裝載選項,每個選項都有自己的主控方案定價模式:
計劃 | 描述 |
---|---|
Flex 使用量方案 | 您須支付的費用來自函式在執行個體上執行的執行時間,以及任何「隨時可用」的執行個體。 執行個體會根據傳入事件數目動態地新增和移除。 這是建議的動態擴展計劃,也支援虛擬網路整合。 |
高級 | 提供與使用量方案相同的功能和調整機制,但具有增強的效能和虛擬網路整合。 成本是以您選擇的定價層為基礎。 若要深入了解,請參閱 Azure Functions 進階方案。 |
專用 (App Service) (基本層或更高層) |
當您需要在專用 VM 或隔離中執行時,請使用自訂映像,或想要使用超量 App Service 方案容量。 使用一般 App Service 方案計費。 成本是以您選擇的定價層為基礎。 |
容器應用程式 | 在 Azure Container Apps 所裝載的完全受控環境中建立和部署容器化函式應用程式,讓您將函式與其他微服務、API、網站和工作流程一起執行為容器裝載的程式。 |
耗用 | 您只支付函數應用程式執行時間的費用。 此方案包括每個訂用帳戶的免費授與。 |
您應該一律選擇最能支援函式執行功能、效能和成本需求的選項。 若要深入了解,請參閱 Azure Functions 規模調整和主控。
本文著重於 Flex Consumption 和 Consumption 方案,因為這些方案計費取決於每個實例內的作用中執行期間。
Durable Functions 也可以在這些方案中執行。 若要深入了解使用 Durable Functions 時的成本考量,請參閱 Durable Functions 計費。
以使用量為基礎的成本
以使用量為基礎的成本計算方式 (包括免費授與) 取決於特定方案。 如需最新的成本和授與資訊,請參閱 Azure Functions 定價頁面。
在 Flex Consumption 方案中執行應用程式時,決定成本有兩種模式。 每個模式都是以每個執行個體為基礎來決定。
計費模式 | 描述 |
---|---|
隨選 | 在 [隨選] 模式中執行時,您只需根據函式程式碼在可用執行個體上執行的時間支付費用。 在隨選模式中,不需要最低執行個體計數。 計費項目如下: • 每個隨需執行個體主動執行函式時佈建的記憶體總數 (以 GB-秒為單位),減去每月免費授與的 GB-秒。 • 執行總數,減去每月執行的免費授與 (數目)。 |
隨時可用 | 您可以設定一個或多個執行個體,指派給特定觸發程序類型 (HTTP/Durable/Blob) 和個別函式,讓其隨時都可用於處理要求。 啟用任何隨時可用執行個體時,計費項目如下: • 在所有隨時可用執行個體上佈建的記憶體總數,也稱為基準 (以 GB-秒為單位)。 • 每個隨時可用執行個體主動執行函式時佈建的記憶體總數 (以 GB-秒為單位)。 • 執行總數。 使用隨時可用計費時,沒有免費授權。 |
如需執行價格的最新資訊、隨時可用基準成本,以及隨需執行的免費授與,請參閱 Azure Functions 定價頁面。
此圖表代表此方案中如何判斷隨選成本:
除了執行時間之外,使用一個或多個隨時可用執行個體時,也會針對您維護的隨時可用執行個體數目,以較低的基準費率計費。 隨時可用執行個體的執行時間可能比隨選執行的執行個體執行時間便宜。
重要
在本文中,隨選定價可用來協助瞭解範例計算。 當您在 Flex 使用量方案中執行函式時,請務必檢查 Azure Functions 定價頁面中目前的成本。
請考慮使用只包含 HTTP 觸發程序及下列基本事實的函數應用程式:
- HTTP 觸發程序每秒會處理 40 個常數要求。
- HTTP 觸發程序會處理 10 個並行要求。
- 執行個體記憶體大小設定為
2048 MB
。 - 未設定隨時可用執行個體,這表示應用程式可以調整為零。
在這類情況下,定價會更取決於程式碼執行期間要完成的工作類型。 讓我們看看兩個工作負載案例:
CPU 繫結工作負載:在 CPU 繫結的工作負載中,在相同執行個體中平行處理多個要求沒有好處。 這表示您應將每個要求分配到其自己的執行個體,讓要求儘快完成,而不會發生爭用。 在此案例中,您應該設定低 HTTP 觸發程序並行:
1
。 使用 10 個並行要求時,應用程式會調整為大約 10 個執行個體的穩定狀態,而且每個執行個體一次都會持續主動處理一個要求。由於每個執行個體的大小約 2 GB,因此單一持續主動執行個體的使用量為
2 GB * 3600 s = 7200 GB-s
,其採用的假設隨選執行費率 (未套用任何免費授與) 為每個執行個體每小時$0.1152 USD
。 由於 CPU 繫結應用程式會調整為 10 個執行個體,因此執行時間的每小時費率總計為$1.152 USD
。同樣地,在隨選的每次執行費用中,每秒 40 個要求的費用 (不含任何免費授與) 等於每小時
40 * 3600 = 144,000
(或 14 萬 4 千) 次執行。 執行的每小時成本總計 (免費授與) 為0.144 * $0.20
,也就是每小時$0.0288
。在此案例中,依需求執行 10 個執行個體的每小時成本總計為
$1.152 + $0.0288 = $1.1808 USD
。IO 繫結工作負載:在 IO 繫結的工作負載中,大部分的應用程式時間都花在等候傳入要求時,這可能會受到網路輸送量或其他上游因素的限制。 由於輸入受限,程式碼可以同時處理多個作業,而不會產生負面影響。 在此案例中,假設您可以在相同的執行個體上處理所有 10 個並行要求。
由於使用量費用僅以每個主動執行個體的記憶體為依據,因此使用量費用計算為
2 GB * 3600 s = 7200 GB-s
,其採用的假設隨選執行費率 (未套用任何免費授與) 是單一執行個體每小時$0.1152 USD
。如同在 CPU 繫結案例中,在隨選的每次執行費用中,每秒 40 個要求的費用 (不含任何免費授與) 等於每小時
40 * 3600 = 144,000
(或 14 萬 4 千) 次執行。 在此情況下,執行的總(免授與)每小時成本0.144 * $0.20
,即$0.0288
每小時。在此案例中,依需求執行單一執行個體的每小時成本總計為
$0.1152 + $0.0288 = $0.144 USD
。
其他相關成本
預估在任何方案中執行函數的整體成本時,請記住 Functions 執行階段會使用數個其他 Azure 服務,而這些服務會分別進行計費。 預估函數應用程式的定價時,您與其他 Azure 服務整合的任何觸發程序和繫結都需要建立並支付這些其他服務的費用。
針對使用量方案中所執行的函式,總成本是您函式的執行成本,加上頻寬和其他服務的成本。
預估函式應用程式和相關服務的整體成本時,請使用 Azure 定價計算機。
相關成本 | 描述 |
---|---|
儲存體帳戶 | 每個函數應用程式都需要您有相關聯的一般用途 Azure 儲存體帳戶,這會個別進行計費。 Functions 執行階段會在內部使用此帳戶,但您也可以將其用於儲存體觸發程序和繫結。 如果您沒有儲存體帳戶,則會在建立函數應用程式時為您建立儲存體帳戶。 若要深入了解,請參閱儲存體帳戶需求。 |
Application Insights | 函數依賴 Application Insights,為您的函數應用程式提供高效能監視體驗。 雖然並非必要,但您應該啟用 Application Insights 整合。 每個月都會包括免費遙測資料授與。 若要深入了解,請參閱 Azure 監視器定價頁面。 |
網路頻寬 | 根據資料移動的方向和場景,您可能會產生資料傳輸的成本。 若要深入了解,請參閱頻寬定價詳細資料。 |
影響執行時間的行為
函式的下列行為可能會影響執行時間:
觸發程序和繫結:從函數繫結讀取輸入以及將輸出寫入其中所需的時間會計算為執行時間。 例如,當您的函數使用輸出繫結將訊息寫入至 Azure 儲存體佇列時,您的執行時間會包括將訊息寫入至佇列所花費的時間,而這包括在函數成本的計算中。
非同步執行:函數等待非同步要求結果的時間會計入為執行時間 (在 C# 中為
await
)。 GB/秒計算是根據函數的開始和結束時間,以及該期間內的記憶體使用量。 根據 CPU 活動,該時間發生的情況不會納入計算中。 您可以使用 Durable Functions 在異步操作期間降低成本。 您不需要支付協調器函數中等候所花費的時間。
檢視成本相關資料
在發票中,您可以檢視 [執行總計 - 函數] 和 [執行時間 - 函數] 的成本相關資料,以及實際計費成本。 不過,此發票資料是過去發票期間的每月彙總。
函數應用程式層級計量
若要進一步瞭解函式的成本,您可以使用 Azure 監視器來檢視函式應用程式目前產生的成本相關計量。
使用 Azure 監視器計量瀏覽器,以圖形格式檢視使用量方案函式應用程式的成本相關資料。
在 Azure 入口網站中,瀏覽至您的函式應用程式。
在左側面板中,向下捲動至 [監視],然後選擇 [計量]。
從 [計量] 選擇 [函數執行計數] 和 [彙總] 的 [加總]。 這會新增所選期間的執行計數總和至圖表。
選取 [新增計量],然後重複步驟 2-4,即可新增 [函數執行單位] 至圖表。
產生的圖表包含所選時間範圍中 (在此案例中為兩小時) 的兩個執行計量總計。
因為執行單位數目遠大於執行計數,所以圖表只會顯示執行單位。
此圖表顯示兩小時期間總計使用的 11.1 億 Function Execution Units
(測量單位為 MB/毫秒)。 若要轉換成 GB/秒,請除以 1024000。 在此範例中,函數應用程式已使用 1110000000 / 1024000 = 1083.98
GB/秒。 假設您已使用任何免費授與的執行時間,即可採用此值,並乘以 Functions 定價頁面上目前的執行時間價格 (定價頁面會提供這兩小時的成本)。
函數層級計量
函數執行單位是執行時間與您記憶體使用量的組合,這樣會讓您難以了解記憶體使用量的計量。 記憶體資料不是目前可透過 Azure 監視器取得的計量。 不過,如果您想要最佳化應用程式的記憶體使用量,則可以使用 Application Insights 所收集的效能計數器資料。
如果您尚未這麼做,則請在函數應用程式中啟用 Application Insights。 啟用此整合之後,您可以在入口網站中查詢此遙測資料。
您可以在 Azure 入口網站或 REST API 中使用 Azure 監視器計量瀏覽器來取得監視器計量資料。
決定記憶體使用量
在 [監視] 下,選取 [記錄 (分析)],並複製下列遙測查詢,然後將其貼入查詢視窗,再選取 [執行]。 此查詢會傳回每個取樣時間的總記憶體使用量。
performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value
結果與下列範例類似:
時間戳記 [UTC] | NAME | value |
---|---|---|
9/12/2019, 1:05:14.947 AM | 私用位元組 | 209,932,288 |
9/12/2019, 1:06:14.994 AM | 私用位元組 | 212,189,184 |
9/12/2019, 1:06:30.010 AM | 私用位元組 | 231,714,816 |
9/12/2019, 1:07:15.040 AM | 私用位元組 | 210,591,744 |
9/12/2019, 1:12:16.285 AM | 私用位元組 | 216,285,184 |
9/12/2019, 1:12:31.376 AM | 私用位元組 | 235,806,720 |
決定持續時間
Azure 監視器會追蹤資源層級的計量,而這對於 Functions 來說就是函式應用程式。 Application Insights 整合會根據每個函式來發出計量。 以下是取得函式平均持續時間的範例分析查詢:
customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
NAME | averageDurationMilliseconds |
---|---|
QueueTrigger AvgDurationMs | 16.087 |
QueueTrigger MaxDurationMs | 90.249 |
QueueTrigger MinDurationMs | 8.522 |