创建具有自动缩放吞吐量的 Azure Cosmos DB 容器和数据库

适用对象: NoSQL MongoDB Cassandra Gremlin

在 Azure Cosmos DB 中,可以在数据库和容器上配置标准的(手动的)或自动缩放的预配吞吐量。 通过自动缩放 Azure Cosmos DB 中预配的吞吐量,可以立即自动缩放数据库或容器的吞吐量 (RU/s)。

自动缩放预配吞吐量非常适合于具有可变或不可预测流量模式,并且在高性能和规模方面需要 SLA 的任务关键型工作负载。 默认情况下,自动缩放基于最活跃的区域和分区缩放工作负载。 对于跨区域和分区具有不同工作负荷模式的不一致工作负荷,这种缩放可能会导致不必要的纵向扩展。 动态缩放或动态自动缩放是一项增强功能,在整个过程中对预配内容进行自动缩放,有助于根据每个区域和每个分区级别的使用情况独立缩放此类非一致性工作负载。 如果经常涉及热分区和/或有多个区域,动态缩放可节省成本。

自动缩放的好处

使用自动缩放预配吞吐量配置的 Azure Cosmos DB 数据库和容器具有以下好处:

  • Simple:自动缩放消除了通过自定义脚本或手动缩放容量管理 RU/s 的复杂性。

  • 可缩放:数据库和容器根据需要自动缩放预配吞吐量。 客户端连接、应用程序或 Azure Cosmos DB SLA 不会中断。

  • 经济高效:自动缩放可通过在不使用时进行缩减来优化 RU/s 使用和成本使用。 你只需按小时为工作负载需要的资源付费。 在一个月的所有小时中,如果设置自动缩放最大 RU/s (Tmax),并使用 66% 或更少小时的全额 Tmax,可以通过自动缩放节省开支。 除了动态缩放之外,添加次要区域以实现高可用性更具成本效益,因为每个区域和分区会根据实际使用情况独立缩放。 若要了解详细信息,请参阅如何在标准(手动)和自动缩放预配吞吐量之间进行选择一文。

  • 高度可用: 使用自动缩放的数据库和容器利用相同的多区域分布式容错且高度可用的 Azure Cosmos DB 后端来确保数据持久性和高可用性。

自动缩放的用例

自动缩放的用例包括:

  • 可变或不可预测的工作负载:当工作负载的使用具有可变或不可预测的峰值时,自动缩放会基于使用情况自动增加和缩减。 示例包括根据季节性具有不同流量模式的零售网站;在一天中的不同时间出现峰值的 IOT 工作负载;每月或每年几次出现峰值使用量的业务线应用程序,等等。 利用自动缩放,不再需要为峰值或平均容量进行手动预配。

  • 新应用程序:如果开发新应用程序,但不确定所需的吞吐量 (RU/s),则可以通过自动缩放轻松地开始进行。 可以从 100-1000 RU/s 的自动缩放入口点开始,在一段时间内监视使用情况,并确定正确的 RU/s。

  • 不常使用的应用程序:如果你有个应用程序仅在每天、每周或每月使用几个小时,例如低容量应用程序/网站/博客站点。 自动缩放可调整容量以应对高峰使用期,并在高峰期过后缩减。

  • 开发和测试工作负载:如果你或你的团队在工作时间使用 Azure Cosmos DB 数据库和容器,但在夜间或周末不使用,则自动缩放可通过在不使用时将其纵向缩减至最小来节省成本。

  • 计划生产工作负载/查询:如果你有一系列要在空闲时间段运行的计划请求、操作或查询,则可以使用自动缩放轻松完成该操作。 需要运行工作负载时,吞吐量将自动缩放到所需值,然后纵向缩减。

构建这些问题的自定义解决方案不仅需要大量时间,还会在应用程序的配置或代码中引入复杂性。 自动缩放可立即实现以上方案,无需进行自定义或手动容量缩放。

动态缩放的用例

动态缩放的用例包括:

  • 数据库工作负荷,具有高流量主区域和用于灾难恢复的辅助被动区域。
    • 使用动态缩放时,通过多个区域实现高可用性更具成本效益。 次要区域独立缩放,并在空闲时自动纵向缩减。 次要区域在变为活动状态后也会自动纵向扩展,同时处理来自主要区域的写入复制操作。
  • 多区域数据库工作负荷。
    • 由于自然流量增长和全天下降,这些工作负荷通常观察到请求分布不均衡。 例如,数据库可能在多区域分布时区的工作时间处于活动状态。

自动缩放预配吞吐量的工作方式

通过自动缩放配置容器和数据库时,需要指定所需的最大吞吐量 Tmax。 Azure Cosmos DB 会缩放吞吐量 T,如 0.1*Tmax <= T <= Tmax。 例如,如果将最大吞吐量设置为 20,000 RU/s,,则吞吐量将在 2000 到 20,000 RU/s 之间进行缩放。 由于缩放是自动且即时的,因此在任何时间点,都可以无延迟地消耗预配 Tmax

每小时都会按系统在该小时内缩放到的最高吞吐量 T 进行计费。 启用动态缩放后,缩放基于每个物理分区和区域的使用情况 (RU/s) 进行。 由于每个分区和区域独立缩放,这可能会为非一致性工作负载节省成本,因为避免了不必要的纵向扩展。

自动缩放最大吞吐量 Tmax 的入口点从 1000 RU/s 开始,在 100-1000 RU/s 之间缩放。 可以按增量 1000 RU/s 设置 Tmax,并随时更改值。

例如,如果我们有一个具有 1000 RU/s 和 2 个分区的集合,则每个分区可以达到 500 RU/s。 对于一个小时的活动,利用率如下所示:

区域 分区 吞吐量 利用率 说明
P1 <= 500 RU/秒 100% 500 RU/s,其中 50 RU/s 写入操作,450 RU/s 用于读操作。
P2 <= 200 RU/秒 40% 200 RU/s,包含所有读操作。
阅读 P1 <= 150 RU/秒 百分之三十 150 RU/s,其中 50 RU/s 用于从写入区域复制的写入。 100 RU/s 用于此区域中的读操作。
阅读 P2 <= 50 RU/秒 10%

如果不使用动态缩放,所有分区都基于最热的分区统一缩放。 在此示例中,由于最热的分区利用率为 100%,写入区域和读取区域中的所有分区都缩放为 1000 RU/秒,使总 RU/秒高达 2000 RU/秒

如果使用动态缩放,由于每个分区和区域的吞吐量都是独立缩放的,因此调整到的总 RU/秒将为 900 RU/秒,从而可更好地反映实际流量模式并降低成本。

对现有资源启用自动缩放

使用 Azure 门户CLIPowerShell 在现有数据库或容器上启用自动缩放。 随时可以在自动缩放与标准(手动)预配吞吐量之间切换。 有关详细信息,请参阅此文档

自动缩放的吞吐量和存储限制

对于 Tmax 的任何值,数据库或容器均可以存储总计 0.1 * Tmax GB。 达到此存储量之后,将基于新的存储值自动增加最大 RU/s,而不会影响应用程序。

例如,如果从 50,000 RU/s 的最大 RU/s(在 5000 - 50,000 RU/s 之间缩放)开始,则最多可存储 5000 GB 数据。 如果超过 5000 GB(例如,存储现在是 6000 GB),则新的最大 RU/s 为 60,000 RU/s(在 6000 到 60,000 RU/s 之间缩放)。

将数据库级别吞吐量与自动缩放结合使用时,可以让前 25 个容器共享 1000 的自动缩放最大 RU/s(在 100 - 1000 RU/s 之间缩放),只要未超过 100 GB 存储即可。 有关详细信息,请参阅此文档

启用动态缩放

默认情况下,为在 2024 年 9 月 25 日之后创建的所有 Azure Cosmos DB 帐户启用动态缩放。 希望为其旧帐户启用此功能的客户可以通过 Azure PowerShell/CLI/Rest API 或从 Azure 门户大功能窗格以编程方式执行此操作,如下所示:

  1. Azure 门户中,导航到你的 Azure Cosmos DB 帐户。

  2. 导航到“功能”页。

  3. 找到并启用“动态缩放(按区域和按分区自动缩放)”功能。

    Azure 门户中的“动态缩放(按区域和按分区自动缩放)”功能的屏幕截图。

    重要

    此功能在帐户级别启用,因此帐户中的所有自动缩放容器和自动缩放共享吞吐量数据库将自动应用此功能。 启用此功能不会影响使用手动吞吐量的帐户中的资源。 需要将手动资源更改为自动缩放才能利用动态缩放。 启用此功能不会造成停机或性能影响。 此功能不适用于无服务器帐户。 所有云都支持此功能。

监视 指标

可以使用以下指标监视自动缩放和动态缩放:

标准名称 定义 使用情况指标
预配的吞吐量 显示在一小时内缩放到的合并最高 RU/s,并表示该小时缩放的总 RU/s。 可以使用 Provisioned Throughput 指标查看每小时计费的 RU/s。 使用自动缩放时,将根据最活跃的分区进行每小时计费,并应用于所有分区和区域。 使用动态自动缩放时,会针对每个分区和区域级别每小时缩放到的合并最高 RU/s 计费。
规范化 RU 消耗量 此指标表示每个分区和区域级别的已使用 RU/s 与预配 RU/s 的比率。 使用此指标可确定自动缩放最大吞吐量是否预配不足或过度。

如果指标值保持一致,为 100%,并且应用程序看到速率限制(429 错误代码),则可能需要更多 RU/s。 相比之下,如果此指标值较低且没有速率限制,则可能存在优化和纵向缩减 RU/s 的空间。 详细了解如何解释和调试代码 429 速率限制错误

由于从主要区域写入复制流量,以及次要服务器上的任何读取流量,Normalized RU Consumption 指标反映了次要区域中使用的 RU/s。
自动缩放的 RU 仅针对启用了动态自动缩放的帐户显示每个分区和区域级别的动态缩放预配吞吐量。 使用此指标查看每个区域中的分区如何根据其使用情况独立缩放。

使用 Azure Monitor 指标 - Autoscaled RU分析如何跨分区和区域应用新的自动缩放。 筛选到所需的数据库帐户和容器,然后按物理 PartitionID 指标筛选或拆分。 此指标显示其不同区域的所有分区。

重要

建议使用 Azure Cosmos DB 的本机动态缩放功能来管理容量。 但是,如果需要,可以使用 Azure Monitor 中的 规范化 RU 消耗指标 来做出编程缩放决策。 不推荐使用 Azure Cosmos DB SDK 中的 ReadThroughputAsync() 调用来获取 ProvisionedThroughput,也不推荐在 Azure Monitor 中使用 ProvisionedThroughput 的其他方法,因为这样会导致结果不准确。 这些指标表示具有延迟计费的吞吐量,不应用于扩展决策。

比较 – 使用手动与自动缩放吞吐量配置的容器

有关更多详细信息,请参阅有关如何在标准(手动)与自动缩放吞吐量之间进行选择的此文档

具有标准(手动)吞吐量的容器 具有自动缩放吞吐量的容器
预配吞吐量 (RU/s) 手动预配。 基于工作负载使用模式自动并即时缩放。
请求/操作的速率限制 (429) 如果消耗超出预配容量,则可能会发生。 如果在配置的自动缩放吞吐量范围内消耗 RU/s,则不会发生。
容量规划 必须执行容量规划,并设置所需的确切吞吐量。 系统会自动处理容量规划和容量管理。
定价 使用按小时费率的标准(手动)RU/s,按小时为手动预配 RU/s 付费。 按小时为系统在该小时内扩展到的最高 RU/s 付费。

对于单写入区域帐户,使用按小时费率的自动缩放 RU/s,为每小时使用的 RU/s 付费。

对于具有多个写入区域的帐户,自动缩放不收取额外费用。 需使用相同的多区域写入 RU/秒小时费率,为每小时使用的吞吐量付费。

最适合工作负载类型 可预测和稳定的工作负载 不可预测和可变的工作负载

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

想要将大量资源从标准预配吞吐量迁移到自动缩放的用户可以使用 Azure CLI 脚本将 Azure 订阅中的每个吞吐量资源迁移到自动缩放。

后续步骤