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

创建具有自动缩放功能的 Azure Cosmos DB 容器和数据库

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

用例

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

自动缩放的好处

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

  • 简单:自动缩放通过消除自定义脚本或手动调整的需求,简化了对 RU/s(每秒请求单位)的管理。

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

  • 经济高效:自动缩放会在未使用时自动降低 RU/s,从而优化资源使用并节省成本。 只需为工作负载每小时所需的资源付费。 如果一个月内使用 Tmax 的小时数占总小时数的比例不高于 66%,则自动缩放功能可以节省成本。 此外,动态缩放还可令添加次要区域以实现高可用性更具成本效益,因为每个区域和分区会根据使用情况独立缩放。 若要了解详细信息,请参阅如何在标准(手动)和自动缩放预配吞吐量之间进行选择一文。

  • 高可用性:启用自动缩放的数据库和容器利用全球分布式、容错的 Azure Cosmos DB 后端,以确保数据的持久性和可用性。

自动缩放的用例

自动缩放的用例包括:

  • 可变或不可预测的工作负载:当工作负载的使用具有可变或不可预测的峰值时,自动缩放会基于使用情况自动增加和缩减。 例如,零售网站具有季节性流量模式,物联网工作负载具有每日使用高峰,以及业务线应用程序偶尔会出现使用高峰。 自动缩放无需手动分配峰值或平均容量的吞吐量。

  • 新应用程序:如果你正在开发一个新应用程序,并且不确定所需的吞吐量 (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/秒

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

对现有资源启用自动缩放

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

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

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

例如,如果从 50,000 RU/s 的最大 RU/s(在 5000 和 50,000 RU/s 之间缩放)开始,则最多可存储 5,000 GB 数据。 如果存储超过 5,000 GB,例如达到 6,000 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 订阅中的全部吞吐量资源迁移到自动缩放。