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

如何在标准(手动)和自动缩放预配的吞吐量之间进行选择

适用对象: NoSQL MongoDB Cassandra Gremlin

Azure Cosmos DB 支持两种类型或提供预配的吞吐量:标准(手动)和自动缩放。 这两种吞吐量类型都适用于要求高性能和缩放的任务关键型工作负载,并且在吞吐量、可用性、延迟和一致性方面由相同的 Azure Cosmos DB SLA 支持。

本文介绍如何为工作负载选择标准(手动)和自动缩放预配的吞吐量。

预配的吞吐量类型概述

在深入探讨标准(手动)和自动缩放之间的区别之前,首先要了解 Azure Cosmos DB 中预配的吞吐量的工作原理。

使用预配的吞吐量时,你可以设置吞吐量,以工作负载所需的每秒请求单位 (RU/s) 为单位。 服务预配支持吞吐量需求所需的容量。 针对服务的数据库操作(如读取、写入和查询)会消耗一定数量的请求单元 (RUs)。 详细了解请求单元

下表显示了标准(手动)和自动缩放之间的高级比较。

说明 标准(手动) 自动缩放
最适用于 具有稳定或可预测流量的工作负载 具有可变或不可预测流量的工作负载。 请参阅自动缩放的用例
工作原理 除非手动更改 RU/s T,否则将预配一组随时间变化的静态 RU/s T。 每秒最多可以使用 T RU/s 吞吐量。

例如,如果设置标准(手动)400 RU/s,吞吐量将保持在 400 RU/s。
你设置了不希望系统超过的最高或最大 RU/s Tmax。 系统会自动调整吞吐量 T,以便 0.1* Tmax <= T <= Tmax

例如,如果将自动缩放最大 RU/s 设置为 4000 RU/s,系统将在 400 - 4000 RU/s 之间缩放。
何时使用 你需要手动管理吞吐量 (RU/s) 并自行缩放。

具有高、一致的预配 RU/s 利用率。 在一个月的所有小时中,如果设置了预配的 RU/s T,并且使用了 66% 或更多小时的全额,那么估计你将使用标准(手动)预配的 RU/s 来节省时间。

这是基于在标准(手动)中设置 T 与在自动缩放中设置相同数量 Tmax 之间的比较。
你希望 Azure Cosmos DB 根据使用情况管理吞吐量 (RU/s) 和缩放。

使用的是可变或难以预测的 RU/s 使用情况。 在一个月的所有小时中,如果设置了自动缩放最大 RU/s Tmax,并使用了 66% 或更少小时的全额 Tmax,那么估计你将使用自动缩放来节省时间。

这是基于在标准(手动)吞吐量中设置自动缩放 Tmax 和相同数量的 T 之间的比较。
计费模式 对于预配的 RU/s,无论消耗了多少 RU,都按每小时计费。

示例:
  • 预配 400 RU/s
  • 小时 1:无请求
  • 小时 2:400 RU/s 的请求数


  • 对于小时 1 和小时 2,将以标准(手动)速率为这两个小时收取 400 RU/s 的费用。
    计费以小时为单位,将按系统在一小时内缩放到的最高 RU/s。

    示例:
  • 预配自动缩放最大 RU/s 为 4000 RU/s(缩放范围在 400 - 4000 RU/s 之间)
  • 小时 1:系统扩展到最高值 3500 RU/s
  • 小时 2:由于没有使用,系统缩减到最小 400 RU/s(总是 Tmax 的 10%)


  • 将在第 1 小时收到 3500 RU/s 的计费,在第 2 小时收到 400 RU/s 的计费,按自动缩放预配的吞吐量率。 每 RU/s 的自动缩放速率为 1.5 * 标准(手动)速率。
    如果超过了预配的 RU/s,会发生什么情况 RU/s 在预配的位置保持静态。 任何在一秒钟内消耗超过预配的 RU 的请求都将受到速率限制,响应建议在重试之前等待一段时间。 如果需要,可以手动增加或降低 RU/s。 系统将把 RU/s 扩展到自动缩放最大 RU/s。 任何在一秒钟内消耗超过自动缩放最大 RU 的请求都将受到速率限制,响应建议在重试之前等待一段时间。

    了解流量模式

    新应用程序

    如果你正在生成一个新应用程序,但还不知道流量模式,你可能想要从入口点 RU/s(或最小 RU/s)开始,以避免在开始时过度预配。 或者,如果你有一个不需要大规模的小型应用程序,你可能只需要预配最小的入口点 RU/s 来优化成本。 对于预期流量较低的小型应用程序,还可以考虑无服务器容量模式。

    无论计划使用标准(手动)还是自动缩放,都应该考虑以下事项:

    如果在 400 RU/s 的入口点预配标准(手动)RU/s,则无法消耗超过 400 RU/s 的吞吐量,除非手动更改吞吐量。 你将以每小时标准(手动)预配的吞吐量为 400 RU/s 计费。

    如果你将自动缩放吞吐量的最大 RU/秒预配为 4000 RU/秒,资源将在 400 到 4000 RU/秒之间缩放。 由于每 RU/s 的自动缩放吞吐量计费速率是标准(手动)速率的 1.5 倍,对于系统已缩减到最低 400 RU/s 的小时,你的计费将高于手动预配 400 RU/s 的计费。 但是,使用自动缩放,在任何时候,如果你的应用程序流量激增,则可以在不需要用户操作的情况下消耗高达 4000 RU/s。 通常情况下,你应该权衡一个好处,即能够在任何时候以 1.5 倍的自动缩放速率消耗最大 RU/s。

    使用 Azure Cosmos DB 容量计算器估计吞吐量需求。

    现有应用程序

    如果现有应用程序使用标准(手动)预配的吞吐量,则可以使用 Azure Monitor 指标来确定流量模式是否适合自动缩放。

    首先,查找数据库或容器的规范化请求单位消耗指标

    接下来,确定规范化利用率随时间变化的方式。 查找每小时的最高标准化利用率。 然后,计算所有小时的平均标准化利用率。 如果发现平均利用率低于 66%,请考虑在数据库或容器上启用自动缩放。 相反,如果平均利用率高于 66%,则建议保留标准(手动)预配的吞吐量。

    提示

    如果你的帐户配置为使用多区域写入并且具有多个区域,则对于手动和自动缩放,每 100 RU/s 的速率都是相同的。 这意味着启用自动缩放不会产生额外的成本,而不考虑利用率。 因此,当你有多个区域时,始终建议将自动缩放与多区域写入一起使用,以便利用只为应用程序缩放到的 RU/s 付费所节省的金额。 如果你有多区域写入和一个区域,请使用平均利用率来确定自动缩放是否会节省成本。

    示例

    让我们看看两个不同的示例工作负载,并分析它们是否适用于手动或自动缩放吞吐量。 为了说明常规方法,我们将分析三个小时的历史记录,以确定使用手动和自动缩放之间的成本差异。 对于生产工作负载,建议使用 7 到 30 天(或更长时间,如果可用)的历史记录建立 RU/s 使用模式。

    注意

    本文档中所示的所有示例都基于在美国非政府区域中部署的 Azure Cosmos DB 帐户的价格。 定价和计算因所使用的区域而异。有关最新定价信息,请参阅 Azure Cosmos DB 定价页

    假设:

    • 假设我们当前有 30,000 RU/s 的手动吞吐量。
    • 我们的区域配置了一个区域的单区域写入。 如果我们有多个区域,则会用每小时成本乘以区域数量。
    • 对单区域写入帐户中的手动(每小时每 100 RU/s 0.008 美元)和自动缩放吞吐量(每小时每 100 RU/s 0.012 美元)使用公共定价率。 请参阅定价页面了解详细信息。

    首先,我们来看一下规范化的 RU 消耗量。 此工作负载具有可变流量,且规范化的 RU 消耗量范围是从 6% 到 100%。 偶尔会有难以预测的 100% 峰值,但许多小时利用率很低。

    具有可变流量的工作负载 - 所有小时的规范化 RU 消耗量介于 6% 和 100% 之间

    让我们比较一下预配 30,000 RU/s 手动吞吐量的成本与将自动缩放的最大 RU/s 设置为 30,000(在 3000 - 30,000 RU/s 之间缩放)的成本。

    现在,让我们分析历史记录。 假设我们有下表中所述的利用率。 这三个小时内的平均利用率为 39%。 由于规范化的 RU 消耗量平均小于 66%,因此我们使用自动缩放可节省。

    请注意,在小时 1 内,如果有 6% 的使用率,自动缩放将按最大 RU/s 的 10%(这是每小时的最小值)为 RU/s 计费。 尽管自动缩放的成本可能比在特定小时内的手动吞吐量高,但只要平均利用率低于所有小时内的 66%,则自动缩放的总体成本就会更低。

    时间段 使用率 计费的自动缩放 RU/s 选项 1:手动 30,000 RU/s 选项 2:在 3000 - 30,000 RU/s 之间自动缩放
    小时 1 6% 3000 30,000 * 0.008 / 100 = $2.40 3000 * 0.012 / 100 = $0.36
    小时 2 100% 30,000 30,000 * 0.008 / 100 = $2.40 30,000 * 0.012 / 100 = $3.60
    小时 3 11% 3300 30,000 * 0.008 / 100 = $2.40 3300 * 0.012 / 100 = $0.40
    总计 $7.20 $4.36(节省 39%)

    此工作负载具有稳定流量,且规范化的 RU 消耗量范围是从 72% 到 100%。 预配 30,000 RU/s 时,这意味着我们的消耗介于 21,600 到 30,000 RU/s 之间。

    具有稳定流量的工作负载 - 所有小时的规范化 RU 消耗量介于 72% 和 100% 之间

    让我们比较一下预配 30,000 RU/s 手动吞吐量的成本与将自动缩放的最大 RU/s 设置为 30,000(在 3000 - 30,000 RU/s 之间缩放)的成本。

    假设我们有利用率历史记录,如表中所述。 这三个小时内我们的平均利用率为 88%。 由于规范化的 RU 消耗量平均大于 66%,因此我们使用手动吞吐量可节省。

    一般情况下,如果一个月内所有 730 个小时的平均利用率大于 66%,则使用手动吞吐量可节省。

    时间段 使用率 计费的自动缩放 RU/s 选项 1:手动 30,000 RU/s 选项 2:在 3000 - 30,000 RU/s 之间自动缩放
    小时 1 72% 21,600 30,000 * 0.008 / 100 = $2.40 21600 * 0.012 / 100 = $2.59
    小时 2 93% 28,000 30,000 * 0.008 / 100 = $2.40 28,000 * 0.012 / 100 = $3.36
    小时 3 100% 30,000 30,000 * 0.008 / 100 = $2.40 30,000 * 0.012 / 100 = $3.60
    总计 $7.20 $9.55

    提示

    使用标准(手动)吞吐量,可以使用规范化利用率指标来估计切换到自动缩放时可能使用的实际 RU/s。 将某个时间点的规范化利用率乘以当前提供的标准(手动)RU/s。 例如,如果预配了 5000 RU/s,且规范化利用率为 90%,则 RU/s 使用量为 0.9 * 5000 = 4500 RU/s。 如果看到流量模式是可变的,但预配过高或过低,则可能需要启用自动缩放,然后相应地更改自动缩放最大 RU/s 设置。

    如何计算平均利用率

    在一小时内缩放到的最高 RU/s 的自动缩放计费。 分析一段时间内的规范化 RU 消耗量时,在计算平均值时务必使用每小时最高利用率。

    若要计算所有小时内最高利用率的平均值,请执行以下操作:

    1. 将规范化的 RU 消耗指标上的“聚合”设置为“最大值”。
    2. 将“时间粒度”选为 1 小时。
    3. 导航到“图表选项”。
    4. 选择“条形图”选项。
    5. 在“共享”下,选择“下载到 Excel”选项。 从生成的电子表格中,计算所有小时的平均利用率。

    若要查看按小时规范化的 RU 消耗量,1) 将“时间粒度”选为 1 小时;2) 编辑图表设置;3) 选择“条形图”选项;4) 在“共享”下,选择“下载到 Excel”选项以计算所有小时的平均值。

    测量和监视使用情况

    随着时间的推移,在选择吞吐量类型之后,应该监视应用程序并根据需要进行调整。

    使用自动缩放时,请使用 Azure Monitor 查看预配的自动缩放最大 RU/s(自动缩放最大吞吐量)和系统当前缩放到的 RU/s(预配的吞吐量) 。

    以下示例展示了一个使用自动缩放的可变或不可预测的工作负载。 注意,当没有任何流量时,系统将 RU/s 缩放到最大 RU/s 的 10% 的最小值,在本例中分别为 5,000 RU/s 和 50,000 RU/s。

    使用自动缩放的工作负载示例的屏幕截图,其中自动缩放最大 RU/s 为 50,000 RU/s,吞吐量范围为 5000 - 50,000 RU/s。

    将标准预配吞吐量迁移到自动缩放

    想要将大量资源从标准预配吞吐量迁移到自动缩放的用户可以使用 Azure CLI 脚本将 Azure 订阅中的每个吞吐量资源迁移到自动缩放。 有关详细信息,请参阅转换为自动缩放

    后续步骤