你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

估算基于消耗的成本

本文介绍如何估算 弹性消耗计划和消耗计划的计划成本。

选择最能支持您的函数执行所需功能、性能和成本要求的托管选项。 有关详细信息,请参阅 Azure Functions 缩放和托管

本文重点介绍这两个消耗计划,因为这些计划中的计费取决于每个实例内的活动执行期。

提供快速水平缩放,提供灵活的计算选项、虚拟网络集成,并支持使用 Microsoft Entra ID 身份验证进行连接。 在此计划中,实例根据配置的按实例并发、传入事件和每个函数工作负荷动态横向扩展,以实现最佳性能。 Flex 消耗是无服务器托管的推荐计划。 有关详细信息,请参阅 Azure Functions 灵活消费计划托管

Durable Functions 还可以在这两个计划中运行。 有关使用 Durable Functions 时的成本注意事项的详细信息,请参阅 Durable Functions 计费

基于消耗的成本

基于消耗的成本(包括免费给予)的计算方式视具体计划而定。 有关最新的成本和给予信息,请参阅 Azure Functions 定价页

在弹性消耗计划中运行应用程序时,可通过两种模式确定成本。 每个模式基于每个实例确定。

计费模式 说明
按需 按需模式下运行时,仅对函数代码在可用实例上执行的时间付费。 在按需模式下,不需要最小实例计数。 系统会针对以下内容计费:

• 每个按需实例主动执行函数时预配的总内存量(以 GB 秒为单位)减去每月免费授权(GB 秒)。
• 执行总数,减去每月免费授权执行(数量)。
始终就绪 可以配置一个或多个实例,将它们分配给特定触发器类型(HTTP/持久/Blob)和单独的函数,这些实例始终可用于处理请求。 启用任何始终就绪实例后,将按如下方式计费:

• 在所有始终就绪实例(称为基线,以 GB-秒为单位)中预配的总内存量。
• 每个始终就绪实例主动执行函数(以 GB-秒为单位)期间预配的总内存量。
• 总执行次数。

在始终就绪计费中,没有免费授权。

有关执行定价、始终就绪基线成本以及按需执行的免费额度的最新信息,请参阅 Azure Functions 定价页

此图显示了此计划中如何确定按需成本:

基于负载(实例计数)和时间的弹性消耗计划按需成本图。

除了执行时间外,使用一个或多个始终就绪实例时,还要为维护的始终就绪实例数支付较低的基线费率。 就执行时间的价格而言,与按需执行的实例相比,始终就绪的实例可能更划算。

重要说明

本文使用按需定价来帮助你了解示例计算。 在估算您在 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(未应用任何免费赠款),则每个实例的每小时成本将变为 $0.1872 USD。 由于 CPU 绑定的应用扩展到 10 个实例,因此执行时间的总小时速率为 $1.872 USD

    同样,每秒 40 次请求的按需每次执行费用(无任何免费额度)等于 40 * 3600 = 144,000,也就是每小时 0.144 million 次执行。 假设按需费率为每百万次执行 $0.40,则执行的每小时成本总计(无免费额度)为 0.144 * $0.40,即每小时 $0.0576

    在此方案中,按需运行 10 个实例的每小时总成本为 $1.872 + $0.0576s = $1.9296 USD

  • IO 密集型工作负载:在 IO 密集型工作负载中,大部分应用程序时间都花在等待传入请求上,这可能受到网络吞吐量或其他上游因素的限制。 由于输入有限,代码可以同时处理多个操作,而不会产生负面影响。 在此方案中,假设可以在同一实例上处理所有 10 个并发请求。

    由于消耗费用仅基于每个活动实例的内存,因此计算出的消耗费用仅为 2 GB * 3600 s = 7200 GB-s,在假定的按需执行速率(不应用任何免费赠款)下,该消耗费用为单个实例每小时 $0.1872 USD

    与 CPU 密集型方案一样,每秒 40 个请求的按需执行费用(没有任何免费授予)等于 40 * 3600 = 144,000,也就是每小时 14.4 万次执行。 在这种情况下,每小时执行的总(无赠予)成本为 0.144 * $0.40,即每小时 $0.0576

    在此方案中,单个实例按需运行的每小时总成本为 $0.1872 + $0.0576 = $0.245 USD

影响执行时间的行为

函数的以下行为可能会影响执行时间:

  • 触发器和绑定:从 函数绑定 读取输入和写入输出所花费的时间算作执行时间。 例如,如果函数使用某个输出绑定将消息写入 Azure 存储队列,则执行时间包括将该消息写入该队列所花费的时间,而函数成本计算包括该写入时间。

  • 异步执行:函数等待异步请求await (以 C# 为单位)的结果的时间计为执行时间。 “GB 秒”计算基于函数的开始和结束时间,以及该时间段内的内存用量。 在 CPU 活动方面,在该时间发生的情况不会纳入计算中。 可能也可以使用 Durable Functions 来降低异步操作期间产生的成本。 业务流程协调程序函数中的等待时间不产生费用。

从指标中查看和估算成本

发票中,可以查看与成本相关的数据以及实际计费成本。 但是,此发票数据是过去发票期限的每月聚合。

本部分介绍如何使用应用级和函数执行的指标来估算运行函数应用的成本。

函数应用级指标

您的应用程序可用的应用级指标取决于您使用的消耗计划类型。

这些 Azure Monitor 指标与弹性消耗计划计费相关:

指标 说明 仪表计算
按需函数执行计数 按需实例中的函数执行总数。 OnDemandFunctionExecutionCount按需执行总数 计量相关。
随时就绪函数执行计数 始终就绪实例中的函数执行总数。 AlwaysReadyFunctionExecutionCountAlways Ready Total Executions 指标相关。
按需函数执行单位 主动执行函数时,按需实例的总 MB-毫秒数。 OnDemandFunctionExecutionUnits / 1,024,000 是按需执行时间计量,以 GB 秒为单位。
始终就绪函数执行单元 主动执行函数时,随时就绪实例的总 MB-毫秒数。 AlwaysReadyFunctionExecutionUnits / 1,024,000 是始终就绪执行时间计量,以 GB 秒为单位。
随时待命单位 分配给应用的随时就绪实例的总 MB-毫秒数,无论函数是否正在主动执行。 AlwaysReadyUnits / 1,024,000 是始终就绪基线计数器,以 GB 秒为单位。

有关详细信息,请参阅 Azure Functions 监视数据参考

若要更好地了解函数的成本,请使用 Azure Monitor 查看函数应用生成的与成本相关的指标。 可以使用以下工具之一查看监视指标:

使用 Azure Monitor 指标资源管理器 以图形格式查看弹性消耗计划函数应用的成本相关数据。

  1. Azure 门户中,访问您的函数应用。

  2. 在左侧面板中,向下滚动到 “监视 ”并选择“ 指标”。

  3. 指标中,选择按需函数执行计数总和用于聚合。 此选择将所选时间段内执行计数的总和添加到图表中。

  4. 选择 “添加指标 ”并添加 “按需函数执行单位”、“ 始终就绪函数执行计数”、“ 始终就绪函数执行单位”和 “始终就绪单位 ”到图表。

生成的图表包含所选时间范围内所有弹性消耗执行指标的总计,在本示例中为自定义时间范围。

按需函数执行计数和按需函数执行单位图。

由于按需函数执行单位数大于按需函数执行计数,并且应用中没有 始终就绪的实例 ,因此图表只显示按需函数执行单位。

此图表显示 16 分钟期间总共消耗了 35.4 亿 On Demand Function Execution Units ,以 MB 毫秒为单位。 若要转换为 GB 秒,请除以 1,024,000。 在此示例中,函数应用消耗了 3,540,000,000 / 1,024,000 = 3,457.03 GB 秒。 可以将此值与Functions 定价页上的按需执行时间当前价格相乘,以计算这 16 分钟的费用,前提是你已用完所有免费执行时间的赠送额度。 可将该相同计算用于“始终就绪函数执行单元”指标和“始终就绪执行时间”计费计量成本,还可用于“始终就绪单元”指标和“始终就绪基准”计费计量成本,从而得出始终就绪实例的 GB-秒成本。

若要计算按需总执行成本,请获取同一时间段的按需函数执行计数总和,转换为数百万,然后在 Functions 定价页上乘以按需总执行价格。 例如,上述示例中的 2,100 次执行将转换为 0.0021 百万次执行。 可以使用相同的计算与 Always Ready 函数执行计数指标和 Always Ready 总执行次数计费表一起使用,以确定由 Always Ready 实例处理的执行成本。

函数级指标

估算函数执行的成本时,内存使用率非常重要。 但是,内存使用量影响成本的方式取决于特定的计划类型:

在 Flex Consumption 计划中,根据所选 实例大小(具有设置的内存限制)为实例运行的时间付费。 有关详细信息,请参阅 计费

如果尚未执行此操作,你可以在函数应用中启用 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
姓名 平均持续时间毫秒
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger 最小持续时间(毫秒) 8.522

在估算任何计划中运行函数的总体成本时,请记住,函数运行时将使用其他多个 Azure 服务,而每个服务单独计费。 估算函数应用的定价时,对于与其他 Azure 服务集成的任何触发器和绑定,需要创建这些附加的服务并为其付费。

对于在消耗计划中运行的函数,总成本是函数的执行成本加上带宽和附加服务的成本。

估算函数应用和相关服务的总体成本时,请使用 Azure 定价计算器

相关成本 说明
存储帐户 需要为每个函数应用提供一个关联的常规用途 Azure 存储帐户,该帐户单独计费。 函数运行时在内部使用此帐户,但你也可以将其用于存储触发器和绑定。 如果你没有存储帐户,系统会在创建函数应用时创建一个存储帐户。 若要了解更多信息,请参阅存储帐户要求
Application Insights 函数依靠 Application Insights 为函数应用提供高性能的监视体验。 虽然未强制要求,但你应启用 Application Insights 集成。 每月会免费授予遥测数据。 要了解详细信息,请参阅 Azure Monitor 定价页
网络带宽 根据数据移动的方向和方案,可能会产生数据传输费用。 有关详细信息,请参阅带宽定价详细信息

后续步骤