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

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

亚马逊 DocumentDB 无服务器的工作原理

概览

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

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

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

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

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

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

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

亚马逊 DocumentDB 集群的配置

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

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

您也可以设置一个集群,其中所有容量均由 DocumentDB 无服务器管理。为此,您可以创建一个新集群并从一开始就使用 DocumentDB 无服务器。或者,您可以将现有集群中的所有预配置容量替换为 DocumentDB 无服务器容量。有关使用 DocumentDB 无服务器创建新集群或将现有集群切换到 DocumentDB 无服务器的过程,请参阅和。创建使用 Amazon DocumentDB 无服务器的集群 迁移到 Amazon DocumentDB 无服务器

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

亚马逊 DocumentDB 无服务器扩展容量

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

每个 DCU 由大约 2 千兆字节 (GiB) 的内存、相应的 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 定价。假设集群中写入器和读取器的总数为 n。在这种情况下, DCUs 当你不运行任何数据库操作时,集群最少消耗大约 n x。Amazon DocumentDB 本身可能会运行监控或维护操作,从而导致少量负载。当数据库满负荷运行 DCUs 时,该集群的最大消耗量不超过 n x。

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

亚马逊 DocumentDB 无服务器扩展

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

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

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

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

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

向上或向下扩展可能是由以下原因引起的:

  • 内存利用率

  • CPU 使用率

  • 网络使用率

  • 存储使用率

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

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

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

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

有关查看和更改无服务器实例的促销等级的详细信息,请参阅查看和修改无服务器读者的促销等级

DocumentDB 无服务器扩展可能在数据库连接处于打开状态、事务处理中等时发生。DocumentDB 无服务器不会等待安静点开始扩展。扩缩不会中断任何正在进行的数据库运营。

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

DocumentDB 无服务器是否执行扩展,以及启动后扩展的速度有多快,还取决于集群的最小和最大 DCU 设置。此外,它还取决于读取器是配置为随写入器一起扩缩还是独立于写入器进行扩缩。有关扩展配置的详细信息,请参阅亚马逊 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 配置如何影响限制的更多信息,请参阅亚马逊 DocumentDB 无服务器实例限制