选择最能支持您的函数执行所需功能、性能和成本要求的托管选项。 有关详细信息,请参阅 Azure Functions 缩放和托管。
本文重点介绍这两个消耗计划,因为这些计划中的计费取决于每个实例内的活动执行期。
提供快速水平缩放,提供灵活的计算选项、虚拟网络集成,并支持使用 Microsoft Entra ID 身份验证进行连接。 在此计划中,实例根据配置的按实例并发、传入事件和每个函数工作负荷动态横向扩展,以实现最佳性能。 弹性消耗是无服务器托管的推荐方案。 有关详细信息,请参阅 Azure Functions 灵活消费计划托管。
Durable Functions 还可以在这两个计划中运行。 有关使用 Durable Functions 时的成本注意事项的详细信息,请参阅 Durable Functions 计费。
基于消耗的成本
基于消耗的成本(包括免费给予)的计算方式视具体计划而定。 有关最新的成本和给予信息,请参阅 Azure Functions 定价页。
在弹性消耗计划中运行应用程序时,可通过两种模式确定成本。 每个模式基于每个实例确定。
| 计费模式 | 说明 |
|---|---|
| 按需 | 在按需模式下运行时,仅对函数代码在可用实例上执行的时间付费。 在按需模式下,不需要最小实例计数。 系统会针对以下内容计费: • 当每个按需实例主动执行函数(以 GB 秒为单位)时,预配的总内存量减去每月 GB-s 的免费额度。 • 执行的总数减去每月执行的免费额度(数量)。 |
| 始终就绪 | 可以配置一个或多个实例,将它们分配给特定触发器类型(HTTP/持久/Blob)和单独的函数,这些实例始终可用于处理请求。 启用任何始终就绪的实例后,系统会针对以下内容计费: • 在所有始终就绪实例(称为基线,以 GB-秒为单位)中预配的总内存量。 • 每个始终就绪实例主动执行函数(以 GB-秒为单位)期间预配的总内存量。 • 总执行次数。 在始终就绪的计费模式中,不存在免费赠予。 |
此图显示了此计划中如何确定按需成本:
除了执行时间外,使用一个或多个始终就绪实例时,还要为维护的始终就绪实例数支付较低的基线费率。 就执行时间的价格而言,与按需执行的实例相比,始终就绪的实例可能更划算。
重要
本文使用按需定价来帮助你了解示例计算。 在估算您在 Flex Consumption 计划中执行函数可能产生的成本时,请始终检查 Azure Functions 定价页上 的当前花费。
请考虑一个函数应用程序,该应用程序中仅有 HTTP 触发器,并具有以下基本信息:
- HTTP 触发器每秒处理 40 个常量请求。
- HTTP 触发器处理 10 个并发请求。
- 实例内存大小为 2,048 MB。
- 配置无始终就绪的实例,这意味着应用程序可以缩减至零。
在这种情况下,定价取决于代码执行期间完成的工作类型。 让我们看看两个工作负载方案:
CPU 密集型工作负载:在 CPU 密集型工作负载中,在同一实例中并行处理多个请求没有任何优势。 此限制意味着最好将每个请求分发到其自己的实例,以便请求尽快完成,而无需争用。 在此方案中,设置较低的 HTTP 触发器并发量
1。 对于 10 个并发请求,应用可缩放到大约 10 个实例的稳定状态,并且每个实例都持续活动,一次处理一个请求。由于每个实例的大小约为 2GB,因此单个持续活动实例的消耗量为
2 GB * 3600 s = 7200 GB-s。 假设按需执行速率为 $0.000026 GB-s(未应用任何免费赠款),则每个实例的每小时成本将变为¥1.33 CNY。 由于 CPU 绑定的应用扩展到 10 个实例,因此执行时间的总小时速率为¥13.33 CNY。同样,每秒 40 次请求的按需每次执行费用(无任何免费额度)等于
40 * 3600 = 144,000,也就是每小时0.144 million次执行。 假设按需费率为每百万次执行¥2.85,则执行的每小时成本总计(无免费额度)为0.144 * ¥2.85,即每小时¥0.41。在此方案中,按需运行 10 个实例的每小时总成本为
¥13.33 + ¥0.41s = ¥13.74 CNY。IO 密集型工作负载:在 IO 密集型工作负载中,大部分应用程序时间都花在等待传入请求上,这可能受到网络吞吐量或其他上游因素的限制。 由于输入有限,代码可以同时处理多个操作,而不会产生负面影响。 在此方案中,假设可以在同一实例上处理所有 10 个并发请求。
由于消耗费用仅基于每个活动实例的内存,因此计算出的消耗费用仅为
2 GB * 3600 s = 7200 GB-s,在假定的按需执行速率(不应用任何免费赠款)下,该消耗费用为单个实例每小时¥1.33 CNY。与 CPU 密集型方案一样,每秒 40 个请求的按需执行费用(没有任何免费授予)等于
40 * 3600 = 144,000,也就是每小时 14.4 万次执行。 在这种情况下,每小时执行的总(无赠予)成本为0.144 * ¥2.85,即每小时¥0.41。在此方案中,单个实例按需运行的每小时总成本为
¥1.33 + ¥0.41 = ¥1.74 CNY。
影响执行时间的行为
函数的以下行为可能会影响执行时间:
触发器和绑定:从 函数绑定 读取输入和写入输出所花费的时间算作执行时间。 例如,如果函数使用某个输出绑定将消息写入 Azure 存储队列,则执行时间包括将该消息写入该队列所花费的时间,而函数成本计算包括该写入时间。
异步执行:函数等待异步请求
await(以 C# 为单位)的结果的时间计为执行时间。 “GB 秒”计算基于函数的开始和结束时间,以及该时间段内的内存用量。 在 CPU 活动方面,在该时间发生的情况不会纳入计算中。 可能也可以使用 Durable Functions 来降低异步操作期间产生的成本。 业务流程协调程序函数中的等待时间不产生费用。
从指标中查看和估算成本
在 发票中,可以查看与成本相关的数据以及实际计费成本。 但是,此发票数据是过去发票期限的每月聚合。
本部分介绍如何使用应用级和函数执行的指标来估算运行函数应用的成本。
函数应用级指标
使用 Azure Monitor 指标资源管理器可以图形格式查看消耗计划函数应用的成本相关数据。
在Azure 门户中,访问您的函数应用。
在左侧面板中,向下滚动到 “监视 ”并选择“ 指标”。
从指标中,选择函数执行计数和总和用于聚合。 此选择将所选时间段内执行计数的总和添加到图表中。
选择“添加指标”并重复步骤 2-4,将“函数执行单位”添加到图表中。
生成的图表包含所选时间范围内(在本例中为 2 小时)两个执行指标的总和。
由于执行单位数远大于执行计数,因此图表仅显示执行单位。
此图显示两小时时间段内总共消耗了 11.1 亿个 Function Execution Units(以“MB 毫秒”度量)。 若要转换为 GB 秒,请除以 1,024,000。 在此示例中,函数应用消耗了 1,110,000,000 / 1,024,000 = 1,083.98 GB 秒。 将此值乘以 Functions 定价页上当前执行时间的价格,从而得出这两个小时的成本,假设你已经使用了所有免费提供的执行时间。
函数级指标
估算函数执行的成本时,内存使用率非常重要。 但是,内存使用量影响成本的方式取决于特定的计划类型:
如果尚未执行此操作,你可以在函数应用中启用 Application Insights。 启用此集成后,你可以在门户中查询此遥测数据。
可以使用 Azure 门户中的 Azure Monitor 指标资源管理器或使用 REST API 来获取 Monitor 指标数据。
确定内存用量
在“监视”下选择“日志(分析)”,复制以下遥测查询并将其粘贴到查询窗口中,然后选择“运行”。 此查询返回每个采样时间的总内存用量。
performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value
结果类似于以下示例:
| 时间戳 [UTC] | 姓名 | 值 |
|---|---|---|
| 2019/9/12,上午 1:05:14.947 | 专用字节数 | 209,932,288 |
| 2019/9/12,上午 1:06:14.994 | 专用字节数 | 212,189,184 |
| 2019/9/12,上午 1:06:30.010 | 专用字节数 | 231,714,816 |
| 2019/9/12,上午 1:07:15.040 | 专用字节数 | 210,591,744 |
| 2019/9/12,上午 1:12:16.285 | 专用字节数 | 216,285,184 |
| 2019/9/12,上午 1:12:31.376 | 专用字节数 | 235,806,720 |
确定持续时间
Azure Monitor 可跟踪资源级指标,对于函数来说,就是跟踪函数应用指标。 Application Insights 集成会发出每个函数的指标。 下面是一个示例分析查询,可用于获取函数的平均持续时间:
customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
| 姓名 | 平均持续时间毫秒 |
|---|---|
| 队列触发器 平均持续时间(毫秒) | 16.087 |
| QueueTrigger MaxDurationMs | 90.249 |
| 队列触发器 最短持续时间毫秒 | 8.522 |
其他相关成本
在估算任何计划中运行函数的总体成本时,请记住,函数运行时将使用其他多个 Azure 服务,而每个服务单独计费。 估算函数应用的定价时,对于与其他 Azure 服务集成的任何触发器和绑定,需要创建这些附加的服务并为其付费。
对于在消耗计划中运行的函数,总成本是函数的执行成本加上带宽和附加服务的成本。
估算函数应用和相关服务的总体成本时,请使用 Azure 定价计算器。
| 相关成本 | 说明 |
|---|---|
| 存储帐户 | 需要为每个函数应用提供一个关联的常规用途 Azure 存储帐户,该帐户单独计费。 函数运行时在内部使用此帐户,但你也可以将其用于存储触发器和绑定。 如果你没有存储帐户,系统会在创建函数应用时创建一个存储帐户。 有关详细信息,请参阅存储帐户要求。 |
| Application Insights | 函数依靠 Application Insights 为函数应用提供高性能的监视体验。 虽然未强制要求,但你应启用 Application Insights 集成。 每月会免费授予遥测数据。 要了解详细信息,请参阅 Azure Monitor 定价页。 |
| 网络带宽 | 根据数据移动的方向和方案,可能会产生数据传输费用。 有关详细信息,请参阅带宽定价详细信息。 |