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

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

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

设置 Neptune 无服务器数据库集群与设置普通预调配集群类似,需要对最小和最大扩展单位进行额外配置,并将实例类型设置为 db.serverless。扩展配置在 Neptune 容量单位 (NCUs) 中定义,每个容量单位由 2 GiB(吉字节)的内存 () 以及相关的虚拟处理器容量 (vRAM) 和网络组成。CPU它被设置为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 写入器或读取器实例都有一个容量,该浮点数表示该实例NCUs当前正在使用的数量。您可以使用实例级别的 CloudWatch ServerlessDatabaseCapacity指标来了解给定数据库实例当前正在使用多少NCUs实例,并使用该NCUUtilization指标来了解该实例正在使用的最大容量占其最大容量的百分比。这两个指标也适用于数据库集群级,用于显示整个数据库集群的平均资源利用率。

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

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

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

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

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

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

注意

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

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

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

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

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

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

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

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

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

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

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

注意

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

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

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

估计最佳最小容量设置

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

例如,如果您的预配置工作负载对小型数据库实例类(例如T3或)的内存要求过高T4g,请选择可提供与R5R6g数据库实例类相当的内存的最低NCU设置。

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

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

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

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

估计最佳的最大容量设置

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

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

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