Neptune 无服务器数据库集群中的容量扩展 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Neptune 无服务器数据库集群中的容量扩展

设置 Neptune 无服务器数据库集群与设置普通预调配集群类似,需要对最小和最大扩展单位进行额外配置,并将实例类型设置为 db.serverless。扩展配置以 Neptune 容量单位 (NCU) 定义,每个容量单位由 2GiB 内存 (RAM) 以及相关的虚拟处理器容量 (vCPU) 和网络组成。它设置为 ServerlessV2ScalingConfiguration 对象的一部分,用 JSON 表示,如下所示:

"ServerlessV2ScalingConfiguration": { "MinCapacity": (minimum NCUs, a floating-point number such as 1.0), "MaxCapacity": (maximum NCUs, a floating-point number such as 128.0) }

在任何时候,每个 Neptune 写入器或读取器实例都有一个由浮点数衡量的容量,该浮点数表示该实例当前使用的 NCU 数量。您可以使用实例级别的 CloudWatch ServerlessDatabaseCapacity指标来了解给定数据库实例当前正在使用多少 NCU,并使用 ncuU ssionation 指标来了解该实例正在使用的最大容量占其最大容量的百分比。这两个指标也适用于数据库集群级,用于显示整个数据库集群的平均资源利用率。

创建 Neptune 无服务器数据库集群时,您可以为所有无服务器实例设置最小和最大 Neptune 容量单位 (NCU) 数量。

您指定的最小 NCU 值可设置数据库集群中无服务器实例可以缩小到的最小大小,同样,最大 NCU 值确定了无服务器实例可以增长到的最大大小。您可以设置的最高的最大 NCU 值为 128.0 NCU,最低的最小值为 1.0 NCU。

Neptune 通过监控 CPU、内存和网络等资源的利用率,持续跟踪每个 Neptune 无服务器实例上的负载。负载由应用程序的数据库操作、服务器的后台处理以及其它管理任务产生。

当无服务器实例上的负载达到当前容量限制时,或者当 Neptune 检测到任何其它性能问题时,该实例会自动扩展。当实例上的负载下降时,容量会缩减到配置的最小容量单位,CPU 容量将在内存之前释放。这种架构允许以可控的逐步减少的方式释放资源,并有效地处理需求波动。

您可以将读取器实例与写入器实例一起扩展,也可以通过设置其提升层来独立扩展。提升层 0 和 1 中的读取器实例与写入器同时扩展,这使它们的大小保持在适当的容量,以便在失效转移情况下快速接管来自写入器的工作负载。提升层 2 到 15 的读取器独立于写入器实例且也独立于彼此进行扩展。

如果您将 Neptune 数据库集群创建为多可用区集群以确保高可用性,则 Neptune 无服务器会根据数据库负载纵向扩展和缩减所有可用区中的实例。您可以将辅助可用区中读取器实例的提升层设置为 0 或 1,这样它就可以随主可用区中写入器实例的容量一起纵向扩展和缩减,以便它随时可以接管当前的工作负载。

注意

Neptune 数据库集群的存储由您所有数据的六个副本组成,分布在三个可用区中,无论您是否将集群创建为多可用区集群。存储复制由存储子系统处理,不受 Neptune 无服务器的影响。

为 Neptune 无服务器数据库集群选择最小容量值

您可以为最小容量设置的最小值为 1.0 NCU。

请务必不要将最小值设置为低于应用程序高效运行所需的值。将其设置得过低可能导致某些内存密集型工作负载的超时率更高。

将最小值设置得尽可能低可以节省资金,因为当需求较低时,您的集群将使用最少的资源。但是,如果您的工作负载往往会大幅波动,从非常低到非常高,则可能需要将最小值设置为较高,因为较高的最小值可以使您的 Neptune 无服务器实例更快地纵向扩展。

其原因是 Neptune 根据当前容量选择扩展增量。如果当前容量较低,Neptune 最初将缓慢纵向扩展。如果最小值较高,Neptune 从较大的扩展增量开始,因此可以更快地纵向扩展,以应对工作负载的突然大幅增加。

为 Neptune 无服务器数据库集群选择最大容量值

您可以为最大容量设置的最大值是 128.0 NCU,可以为最大容量设置的最小值是 2.5 NCU。无论您设置的最大容量值是多少,都必须至少与您设置的最小容量值一样大。

通常,请将最大值设置得足够高,以应对应用程序可能遇到的峰值负载。将其设置得过低可能导致某些内存密集型工作负载的超时率更高。

将最大值设置得尽可能高的好处是,即使是最意想不到的工作负载,您的应用程序也可能能够处理。缺点是您失去了一些预测和控制资源成本的能力。需求的意外激增最终可能会使成本远远超过您预期的预算。

精心设定的最大值的好处是,它可以让您满足峰值需求,同时也为 Neptune 计算成本设定了上限。

注意

更改 Neptune 无服务器数据库集群的容量范围,会导致某些配置参数的默认值发生更改。Neptune 可以立即应用其中一些新的默认值,但是某些动态参数更改只有在重启后才会生效。pending-reboot 状态表示需要重启才能应用一些参数更改。

使用您的现有配置来估算无服务器需求

如果您通常修改预调配数据库实例的数据库实例类以满足异常高或异常低的工作负载,则可以利用这个经验粗略估计等效的 Neptune 无服务器容量范围。

估计最佳最小容量设置

您可以应用您对现有 Neptune 数据库集群的了解来估算最有效的无服务器最小容量设置。

例如,如果您的预调配工作负载的内存要求对于 T3T4g 等小型数据库实例类而言过高,请选择可提供与 R5R6g 数据库实例类的内存相当的最低 NCU 设置。

或者,假设您在集群的工作负载较低时使用 db.r6g.xlarge 数据库实例类。该数据库实例类具有 32GiB 的内存,因此,您可以将最小 NCU 设置指定为 16,从而创建可以缩减至大约是这个相同容量的无服务器实例(每个 NCU 对应于大约 2GiB 的内存)。如果 db.r6g.xlarge 实例有时未得以充分利用,您可以指定一个较低的值。

如果您的应用程序在数据库实例可以在内存或缓冲区缓存中保存给定数量的数据时工作效率最高,请考虑指定一个足够大的最小 NCU 设置,以便为此类情况提供足够的内存。否则,当无服务器实例缩减时,数据可能会被从缓冲区缓存中逐出,并且当实例再次纵向扩展时,数据必须随着时间的推移读回到缓冲区缓存。如果将数据带回缓冲区缓存的 I/O 量很大,那么选择更高的最小 NCU 值可能是值得的。

如果您发现您的无服务器实例大部分时间都在特定容量下运行,则最好将最小容量设置为略低于该容量。如果当前容量没有远低于所需容量,则 Neptune 无服务器可以高效地估计纵向扩展的规模和速度。

混合配置中,使用预调配的写入器和 Neptune 无服务器读取器,读取器不会随写入器一起扩展。由于它们是独立扩展的,因此为它们设置较低的最小容量会导致复制滞后过大。当写入密集度很高的工作负载时,它们可能没有足够的容量来跟上写入器所做的更改。在这种情况下,请设置与写入器容量相当的最小容量。尤其是,如果在提升层 2-15 的读取器中观察到复制滞后,请增大集群的最小容量设置。

估计最佳的最大容量设置

您还可以应用您对现有 Neptune 数据库集群的了解来估算最有效的无服务器最大容量设置。

例如,假设您在集群的工作负载较高时使用 db.r6g.4xlarge 数据库实例类。该数据库实例类有 128GiB 的内存,因此您可以将最大 NCU 设置指定为 64,以设置等效的 Neptune 无服务器实例(每个 NCU 对应大约 2GiB 的内存)。如果 db.r6g.4xlarge 实例无法始终处理工作负载,您可以指定一个更高的值,以便进一步纵向扩展数据库实例。

如果您的工作负载很少出现意想不到的峰值,那么将最大容量设置得足够高,以便即使在这些峰值期间也能保持应用程序性能,这可能是有意义的。另一方面,您可能需要设置较低的最大容量,这样可以在异常峰值期间降低吞吐量,但这样可以让 Neptune 毫无问题地处理预期的工作负载,从而限制成本。