Compartir a través de

使用自动缩放创建 Azure Cosmos DB 容器和数据库

Azure Cosmos DB 允许为数据库和容器配置标准(手动)或自动缩放吞吐量。 自动缩放可调整吞吐量(RU/秒),以匹配工作负荷,确保高性能和成本效益。

用例

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

自动缩放的好处

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

  • 简单: 自动缩放可简化 RU/s 的管理,无需自定义脚本或手动缩放。

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

  • 经济高效: 自动缩放通过在不使用时纵向缩减来优化 RU/s 和成本。 只需为工作负荷每小时所需的资源付费。 如果每月 Tmax 使用 66 个% 或更少的小时,自动缩放可以节省成本。 动态缩放还使添加次要区域以实现更具成本效益的高可用性,因为每个区域和分区会根据使用情况独立缩放。 详细了解 如何在标准(手动)和自动缩放预配吞吐量之间进行选择

  • 高可用性: 具有自动缩放的数据库和容器使用多区域分布式容错 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/秒,缩放范围为 100 到 1000 RU/秒。 可以按增量 1000 RU/s 设置 Tmax,并随时更改值。

例如,如果集合有 1000 RU/秒和 2 个分区,则每个分区最多可扩展到 500 RU/秒。 对于一个小时的活动,利用率如下所示:

区域 分区 吞吐量 利用率 说明
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/秒

通过动态缩放,每个分区和区域的吞吐量独立缩放,总共 900 RU/秒,从而更好地反映实际流量模式并降低成本。

对现有资源启用自动缩放

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

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

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

例如,如果从最大 RU/秒 50,000 RU/秒(缩放 5000 到 50,000 RU/秒)开始,最多可存储 5,000 GB 的数据。 如果存储超过 5,000 GB(例如达到 6,000 GB),则新的最大 RU/秒将变为 60,000 RU/秒(缩放 6000 到 60,000 RU/秒)。

将数据库级别吞吐量与自动缩放结合使用时,可以让前 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/秒。 相比之下,如果此指标值较低且没有速率限制,则可能存在优化和纵向缩减 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 订阅中的所有吞吐量资源迁移到自动缩放。