Amazon DocumentDB 无服务器的工作原理 - Amazon DocumentDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon DocumentDB 无服务器的工作原理

概述

Amazon DocumentDB 无服务器适用于要求严苛、变化很大的工作负载。例如,您的数据库使用量在短时间内可能很大,紧接着就是长时间的少量活动或完全没有活动。其中一些例子是定期举办促销活动的零售、游戏或体育网站,以及根据需要生成报告的数据库。其他一些例子包括开发和测试环境,以及使用量可能会迅速增加的新应用程序。对于类似这些情况和许多其他情况,使用预置模型并不总是能提前正确地配置容量。如果您过度预置并且保留不使用的容量,也可能导致更高的成本。

相比之下,DocumentDB 预置集群适合稳定的工作负载。对于已配置的集群,您可以选择具有预定义内存量、CPU 功耗、 I/O 带宽等的实例类别。如果您的工作负载发生变化,可以手动修改写入器和读取器的实例类。如果您可以在预期的消费模式之前调整容量,并且在更改集群中写入器和读取器的实例类时,出现短暂的中断是可以接受的,则预置模式很适合。

DocumentDB 无服务器专为支持即时可扩展的无服务器集群而从头开始构建。DocumentDB 无服务器的设计旨在提供与预置的写入器和读取器相同程度的安全性和隔离性。这些方面在多租户无服务器云环境中至关重要。动态扩缩机制的开销非常小,因此它可以快速响应数据库工作负载的变化。它还足够强大,可以满足处理需求的急剧增长。

通过使用 DocumentDB 无服务器,您可以创建 DocumentDB 集群,而无需将每个写入器和读取器限制在特定的数据库容量。您指定最小和最大容量范围。DocumentDB 会在该容量范围内扩缩集群中的每个 DocumentDB 无服务器写入器或读取器。通过使用每个写入器或读取器都可以动态扩缩的多可用区集群,您可以获得动态扩缩和高可用性。

DocumentDB 无服务器根据您的最小和最大容量规格自动扩缩数据库资源。扩缩速度很快,因为大多数扩缩事件操作将写入器或读取器保持在同一主机上。在极少数情况下,DocumentDB 无服务器写入器或读取器从一个主机移动到另一个主机,DocumentDB 无服务器自动管理连接。您无需更改数据库客户端应用程序代码或数据库连接字符串。

与预置集群一样,使用 DocumentDB 无服务器时,存储容量和计算容量是分开的。当我们提到 DocumentDB 无服务器容量和扩缩时,增加或减少的总是计算容量。因此,即使 CPU 和内存容量缩减至低水平,您的集群仍会包含许多 TB 的数据。

您可以指定数据库容量,而不是调配和管理数据库服务器。每个 DocumentDB 无服务器写入器或读取器的实际容量会随着时间的推移而发生变化,具体取决于您的工作负载。有关该机制的详细信息,请参阅 Amazon DocumentDB 无服务器扩缩

Amazon DocumentDB 集群的配置

对于每个 Amazon DocumentDB 集群,您可以选择 DocumentDB 无服务器容量、预置容量或两者的任意组合。

您可以设置一个同时包含 DocumentDB 无服务器和预置容量的集群,称为混合配置集群。例如,假设您需要的 read/write 容量超过了 DocumentDB 无服务器写入器的可用容量。在这种情况下,您可以使用非常大的预置写入器来设置集群。然后,您仍然可以对读取器使用 DocumentDB 无服务器。或者假设集群的写入工作负载会变化,但读取工作负载保持稳定。在这种情况下,您可以使用 DocumentDB 无服务器写入器和一个或多个预置读取器设置集群。

您还可以设置由 DocumentDB 无服务器管理所有容量的集群。为此,您可以创建新的集群并从头开始使用 DocumentDB 无服务器。或者,您可以将现有集群中的所有预置容量替换为 DocumentDB 无服务器。对于使用 DocumentDB 无服务器创建新集群或者将现有集群切换到 DocumentDB 无服务器的过程,请参阅 创建使用 Amazon DocumentDB 无服务器的集群迁移到 Amazon DocumentDB 无服务器

如果您在集群中根本不使用 DocumentDB 无服务器,则集群中的所有写入器和读取器都为预置。这是大多数用户都熟悉的最常见的集群类型。预置容量是恒定的。费用相对更容易预测。但是,您必须提前预测所需的容量。在某些情况下,您的预测可能不准确,或者容量需求可能会发生变化。在这些情况下,您的集群可能会变得预置不足(比您期望的更慢)或预置过度(比您期望的更昂贵)。

Amazon DocumentDB 无服务器扩缩容量

Amazon DocumentDB 无服务器的计量单位是 DocumentDB 容量单位(DCU)。DocumentDB 无服务器扩缩容量与您用于预置集群的实例类无关。

每个 DCU 是约 2GiB 的内存、相应的 CPU 和网络的组合。您可以使用此计量单位指定数据库容量范围。ServerlessDatabaseCapacityDCUUtilization CloudWatch 指标帮助您确定数据库实际使用的容量以及该容量在指定范围内的位置。

在任何时候,每个 DocumentDB 无服务器写入器或读取器有一个容量。容量是一个浮点数,表示。 DCUs每当写入器或读取器扩缩时,容量会增加或减少。此值每秒测量一次。对于您打算使用 DocumentDB 无服务器的每个集群,定义一个容量范围:每个 DocumentDB 无服务器写入器或读取器可以在其间进行扩缩的最小容量和最大容量值。集群中的每个 DocumentDB 无服务器写入器或读取器的容量范围都相同。每个 DocumentDB 无服务器写入器或读取器都有自己的容量,该容量处于该范围内的某个位置。

DocumentDB 5.0.0 及更高版本支持 DocumentDB 无服务器,容量范围为 0.5-256。 DCUs

您可以定义的最小 DocumentDB 无服务器容量为 0.5。 DCUs如果小于或等于最大支持容量值,您可以指定一个较高的数值。将最小容量设置为一个很小的数字,可以让负载较轻的集群消耗最少的计算资源。同时,他们随时准备立即接受连接,并在变得忙碌时进行扩展。

我们建议将最小值设置为让每个写入器或读取器可以在缓冲池中保留应用程序工作集的值。这样,在空闲期间,缓冲池的内容不会被丢弃。有关选择扩缩容量范围时的所有注意事项,请参阅 为 DocumentDB 无服务器集群选择扩缩容量范围

根据您在多可用区部署中配置读取器的方式,读取器的容量可以与写入器的容量绑定,也可以独立设置。有关如何执行此操作的详细信息,请参阅 查看和修改无服务器读取器的提升层

监控 DocumentDB 无服务器涉及随时间推移测量集群中的写入器和读取器的容量值。如果数据库没有缩减至最小容量,则可以采取行动,例如调整最小值和优化数据库应用程序。如果数据库持续达到最大容量,则可以采用行动,例如增大最大容量。您还可以优化数据库应用程序,并将查询负载分散到更多读取器中。

DocumentDB 无服务器容量的费用按 DCU 小时数来计量。有关如何计算 DocumentDB 无服务器费用的信息,请参阅 Amazon DocumentDB 定价。假设集群中写入器和读取器的总数为 n。在这种情况下, DCUs 当你不运行任何数据库操作时,集群最少消耗大约 n x。Amazon DocumentDB 本身可能会运行监控或维护操作,从而产生少量负载。当数据库满负荷运行 DCUs 时,该集群的最大消耗量不超过 n x。

有关选择适当的最小和最大 DCU 值的更多详细信息,请参阅 为 DocumentDB 无服务器集群选择扩缩容量范围。您指定的最小和最大 DCU 值也会影响一些 Amazon DocumentDB 实例限制。有关容量范围与实例限制之间的相互影响的详细信息,请参阅 Amazon DocumentDB 无服务器实例限制

Amazon DocumentDB 无服务器扩缩

对于每个 DocumentDB 无服务器写入器或读取器,Amazon DocumentDB 会持续跟踪 CPU、内存和网络等资源的使用率。这些测量统称为负载。负载包括应用程序执行的数据库操作。还包括数据库服务器的后台处理和 Amazon DocumentDB 管理任务。当容量受到上述任何限制时,DocumentDB 无服务器就会扩展。当 DocumentDB 无服务器检测到可以通过扩展予以解决的性能问题时,也会扩展。您可以使用 监控 Amazon DocumentDB 无服务器 中的过程监控资源利用率以及了解其如何影响 DocumentDB 无服务器扩缩。

集群中的写入器和读取器的负载可能会有所不同。写入器处理写入操作,并执行针对集群卷的所有数据修改。读取器可以处理只读请求。

扩缩是为数据库增大或减少 DocumentDB 无服务器容量的操作。使用 DocumentDB 无服务器时,每个写入器和读取器都有自己的当前容量值,以衡量单位。 DCUs当写入器或读取器的当前容量太低而无法处理负载时,DocumentDB 无服务器可将其扩展到更高的容量。当写入器或读取器的当前容量高于所需容量时,可以将写入器或读取器缩减至更低的容量。

DocumentDB 无服务器可以逐步增加容量。当您的工作负载需求开始达到写入器或读取器的当前数据库容量时,DocumentDB 无服务器会增加该写入器或读取 DCUs 器的数量。DocumentDB 无服务器会按所需的增量扩展容量,以便为所消耗的资源提供最佳性能。缩放以小至 0.5 DCUs 的增量进行。当前容量越大,扩缩增量就越大,因此可以更快地进行扩缩。

由于 DocumentDB 无服务器扩缩非常频繁、精细且无中断,因此不会在 AWS 管理控制台中导致离散事件。相反,您可以衡量 Amazon CloudWatch 指标(例如serverlessDatabaseCapacity和)DCUUtilization,并跟踪它们在一段时间内的最小值、最大值和平均值。要了解有关监控 DocumentDB 无服务器的更多信息,请参阅 监控 Amazon DocumentDB 无服务器

扩展或缩减可能是由以下原因引起的:

  • 内存利用率

  • CPU 使用率

  • 网络使用率

  • 存储使用率

您可以监控这些在 DocumentDB 无服务器实例 up/down 上扩容的原因。有关更多信息,请参阅 监控 Amazon DocumentDB 无服务器

您可以选择使读取器与关联写入器同时扩缩,也可以独立于写入器进行扩缩。您可以通过为该读取器指定提升层来完成扩缩。

  • 提升层 0 和 1 中的 DocumentDB 无服务器读取器与写入器同时扩缩。这种扩缩行为使得优先级层 0 和 1 中的读取器非常容易获得。这是因为它们的大小总是调整为适当的容量,以便在失效转移情况下接管来自写入器的工作负载。

  • 提升层 2-15 中的读取器可以独立于写入器进行扩缩。每个读取器都保持在您为集群指定的最小和最大 DCU 值范围内。当读取器独立于关联的写入器数据库进行扩缩时,它会变为空闲并缩减,同时写入器继续处理大量事务。如果在较低的提升层中没有其他读取器可用,它仍可作为失效转移目标。但是,如果它被提升为写入器,则可能需要扩展以处理写入器的全部工作负载。

有关查看和更改无服务器实例的提升层的详细信息,请参阅 查看和修改无服务器读取器的提升层

DocumentDB 无服务器扩缩可能在数据库连接打开、事务处理正在进行等情况下发生。DocumentDB 无服务器不会等到安静点才开始扩缩。扩缩不会中断任何正在进行的数据库运营。

如果您的工作负载需要的读取容量超过单个写入器和单个读取器可提供的读取容量,则可以向集群添加多个 DocumentDB 无服务器读取器。每个 DocumentDB 无服务器读取器可以在您为集群指定的最小和最大容量值范围内扩缩。您可以使用集群的读取器端点将只读会话定向到读取器并减少写入器上的负载。

DocumentDB 无服务器是否执行扩缩,以及扩缩在启动后的速度也取决于集群的最小和最大 DCU 设置。此外,它还取决于读取器是配置为随写入器一起扩缩还是独立于写入器进行扩缩。有关扩缩配置的详细信息,请参阅 Amazon DocumentDB 无服务器扩缩配置

空闲状态 (0.5 DCUs)

当 Amazon DocumentDB 无服务器写入器或读取器处于空闲状态时, DCUs 如果集群配置为 0.5,DocumentDB 无服务器实例支持缩减到 0.5 的 MinCapacity 空闲状态。

在空闲状态下,DocumentDB 无服务器实例虽然没有足够的 CPU 计算容量来支持大多数生产工作负载,但可以随时快速扩展以支持新的工作负载。在非空闲状态下,DocumentDB 无服务器实例通常至少需要 1.0-2.5。 DCUs因此,当 DocumentDB 无服务器实例从空闲状态扩展到非空闲状态时,它们将直接扩展到 1.0-2.5 DCUs ( MaxCapacity 如果值较低,则为的值)。

为了支持在空闲 DCUs 时缩小到 0.5,如果配置为小于或等于 1.0 DCUs,则会对实例限制设置上限。 MinCapacity 有关 MinCapacity 配置如何影响限制的更多信息,请参阅Amazon DocumentDB 无服务器实例限制