用于 Azure Cosmos DB 群集的池

使用 Azure Cosmos DB 机队时,可以使用 简化吞吐量管理。 池允许你在舰队空间级别创建吞吐量每秒请求单位数 (RU/s) 的共享池,多个资源可以根据需要使用 RU/s。 由于池是舰队的一项功能,因此同一舰队空间内不同订阅和资源组中的资源可以共享一个公共池中的 RU/s。

池设计用于 生成多租户应用程序的客户 ,其中隔离要求通常规定每个租户的数据都存储在单独的数据库帐户、数据库或容器中。 池无需超量预配吞吐量以满足峰值吞吐量需求,而是允许你根据每个租户的典型工作负载来创建租户。 当租户由于需求峰值而需要更大的容量时,他们可以从共享池中使用。 此方法可帮助你调整单个租户资源的大小,同时在整个车队中保持性能和成本效益。

重要

池适用于多租户应用程序以及存在大量租户且流量模式各不相同的应用场景。 在池应用场景中,并非所有租户都会同时处于活动状态。 如果你运行的工作负载涉及的租户数量较少,或者大部分租户要么 100% 处于空闲状态,要么 100% 处于活动状态,那么池可能不会提供更多好处。

概念

  • 专用 RU/s:此吞吐量是在专用于该资源的数据库或容器级别预配的 RU/s。 这些请求单元是有保障的,并确保每个资源具有最低级别的保证性能。

    • 在你的数据库帐户中,对于在共享数据库或容器级别设置的资源,始终有专用 RU/s。 这些专用吞吐量分配表示你已在共享数据库或容器级别配置的 RU/s。

    • 专用 RU/s 的入口点是 100–1,000 个自动缩放 RU/秒。

    • 对于自动缩放,专用 RU/s 指的是自动缩放的最大吞吐量,该吞吐量始终得到保证且始终可用。

  • 池 RU/s:可以设置共用 RU/s。 共用 RU/s 是在超出专用 RU/s 时,其数据库帐户中的任何资源都可以在舰队空间内使用的总 RU/s。

没有池功能时,超过其专用 RU/s 分配的资源会受到限制。 有了池功能,这些资源可通过从共享池中使用更多 RU/s 来突破其专用限制,从而扩展处理能力 - 确保多租户工作负载能够获得更高的成本效益和性能。

先使用专用 RU/s,然后再从池中获取。

示例方案

假设你是一个拥有 1,000 个租户的独立软件供应商(ISV),每个租户有:

  • 每个租户一个数据库帐户,用于跨资源进行安全隔离

  • 每个帐户一个容器

  • 每个容器预配 100-1000 RU/s 之间的自动缩放

但是,租户活动不可预知:

  • 大多数租户大部分时间都使用低 RU/s

  • 每个活动租户的峰值需求可以达到 5000 RU/秒

没有池功能

  • 必须为每个容器超量预配 5000 RU/s,以便处理峰值负载

  • 此解决方案会导致租户空闲时浪费 RU/秒和不必要的成本

有池功能

  • 容器主要使用专用 RU/s(例如 100-1,000 RU/s)

  • 机队具有单独的吞吐量池(例如,在机群空间级别为 100,000 – 500,000 RU/秒)。

  • 租户可以临时从池中获取 RU/s,而不会在超出其专用 RU/s 秒时受到限制

  • 在确保租户在需求高峰时获得所需的吞吐量时,会阻止过度预配

共用吞吐量的工作原理

默认情况下,池 RU/s 配置为自动缩放。 在舰队空间中配置池时,可以定义池可缩放的最小吞吐量和最大吞吐量。 最大值最多可以为最小值 10 倍。 例如,如果将最小吞吐量设置为 100,000 RU/秒,则可以将最大值设置为最大 1,000,000 RU/秒。

每小时,系统会根据池在每个可用区域中该小时内所扩展到的最高 RU/s 来计费。 如果池处于空闲状态,则会根据每个区域的最小 RU/s 进行计费。

配置规则

吞吐量池要求 舰队空间 中的所有数据库帐户具有相同的 区域配置。 这意味着,位于不同区域或具有不同单区域/多区域写入设置(常规用途与业务关键服务层级)的帐户无法共享同一个吞吐量池。 池 RU/s 也不能跨区域共享。

下面是允许和不允许的配置的示例:

  • 不同的区域配置
    • 允许:两个帐户,在两个不同的 Azure 区域中配置为单区域写入。
    • 允许:两个帐户,在两个不同的 Azure 区域中配置为多区域写入。
    • 不允许:一个帐户,仅支持单区域写入,但数据分发到两个不同的 Azure 区域。 另一个配置为单区域写入的帐户位于不同的单 Azure 区域中。
    • 不允许:两个帐户,为两组不同的区域配置了多区域分布。
  • 不同的服务层级
    • 允许:两个帐户,在两个单独的 Azure 区域中配置了多区域写入(业务关键)。
    • 不允许:两个帐户,一个具有多区域写入,另一个使用单区域写入。

注释

帐户必须具有相同的基础配置,即都采用多区域写入(业务关键)或都采用单区域写入(常规用途),才可加入同一个池。

监视消耗

在预览版中,可以通过在舰队级别提供的 FleetspaceAutoscaledThroughput 指标来监控池缩放到的 RU/s。

你也可以按照以下步骤,通过 Azure 门户中的 Azure Monitor 在帐户级别监控共用 RU/s 的消耗情况:

  1. 在 Azure 门户中导航到 Azure Cosmos DB 帐户的 “指标 ”页。

  2. 筛选出感兴趣的数据库和容器。

  3. 选择 “请求总数 ”指标。 然后,按容量类型拆分以查看请求是消耗自池还是完全消耗自资源的专用吞吐量。 还可以使用请求单位总数指标来确定吞吐量池中消耗的请求单位数与为每个资源预配的专用 RU/s

使用 Azure 门户在 Azure Monitor 中请求单元可视化的屏幕截图。

默认限制

在使用池化功能时,每个物理分区可供消耗的总 RU/秒仍会受到标准 物理分区限制 的约束。 每个 物理分区 对从池中提取的额外 RU/秒数有限制。

在预览版中:

  • 除了专用吞吐量外,物理分区还使用池中最多 5,000 个额外的 RU/秒。

  • 物理分区的专用和池中的 RU/秒的总消耗量,不能超过 10,000 RU/秒,即便池中有更多可用的 RU/秒资源。

  • 在使用资源池时,物理分区能够消耗的最大 RU/秒数 = ¥\min(5000+currentThroughput, 10000)¥。

小窍门

可以使用 Azure Monitor 中的指标 PhysicalPartitionThroughput 来确定分配给每个物理分区的专用 RU/秒数。