

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

# 可靠性支柱
<a name="reliability-pillar"></a>

[可靠性支柱](https://docs.aws.amazon.com/wellarchitected/latest/framework/reliability.html)包括工作负载在预期时正确、一致地执行其预期功能的能力。这包括在其全部生命周期内运行和测试工作负载的能力。

可靠的工作负载始于前期的软件和基础设施设计决策。您的架构选择将影响您在所有 Well-Architecte AWS d 支柱上的工作负载行为。针对可靠性，您必须遵循特定的模式。

可靠性支柱重点关注以下关键领域：
+ 工作负载架构，包括服务配额和部署模式
+ 变更管理
+ 故障管理

## 了解 Neptune 服务配额
<a name="neptune-quotas"></a>

除中国外，[Neptune 集群的最大容量](https://docs.aws.amazon.com/neptune/latest/userguide/feature-overview-storage.html)可以增长到 128 TiB (TiB)，中国 AWS 区域 除外，其配额为 64 T GovCloud iB。

128TiB 配额足以在图表中存储大约 2000-4000 亿个对象。在带标签的属性图（LPG）中，[对象](https://docs.aws.amazon.com/neptune/latest/userguide/graph-get-started.html)是节点、边缘，或者是节点或边缘上的属性。在资源描述框架（RDF）图中，对象是[四元组](https://docs.aws.amazon.com/neptune/latest/userguide/feature-overview-data-model.html)。

对于任何 [Neptune Serverless 集群](https://docs.aws.amazon.com/neptune/latest/userguide/neptune-serverless-capacity-scaling.html)，您可以设置海王星容量单位的最小和最大数量 ()。NCUs每个 NCU 由 2GiB 的内存及关联的 vCPU 和网络组成。这些最小和最大 NCU 值适用于集群中的任何无服务器实例。您可以设置的最大 NCU 值为 128.0 NCUs，最低的最小值为 1.0。 NCUs通过观察 Amazon CloudWatch 指标`ServerlessDatabaseCapacity`来优化最适合您的应用程序的 NCU 范围，捕捉您经常遇到的范围，并将该范围内的不良行为或成本关联起来。`NCUUtilization`在许多工作负载中，1.0 NCU 的起点太低，在一段时间不活动后会导致行为不可靠。如果您发现工作负载的扩展速度不够快，请增加最小值， NCUs 以便在扩展时为最初的激增提供足够的处理能力。

每个 AWS 账户 区域对您可以创建的数据库资源数量都有配额。这些资源包括数据库实例和数据库集群。在您达到某一资源的限制时，再进行创建该资源的调用就会失败并引发异常。有些配额是软配额，可以通过请求增加。有关 Amazon Neptune 和 Amazon RDS、Amazon Aurora 和 Amazon DocumentDB（兼容 MongoDB）之间共享的配额列表，以及请求增加配额的链接（如果有），请参阅 [Amazon RDS 中的配额](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.Limits)。

## 了解 Neptune 部署模式
<a name="deployment-patterns"></a>

在 Neptune 数据库集群中，有一个主数据库实例和最多 15 个 Neptune 副本。主数据库实例支持读取和写入操作，并执行针对集群卷的所有数据修改。Neptune 副本连接到同一存储卷作为主数据库实例并仅支持读取操作。Neptune 副本可以从主数据库实例分载读取工作负载。

要实现高可用性，请使用只读副本。在不同的可用区中提供一个或多个只读副本实例可以提高可用性，因为只读副本充当主实例的失效转移目标。如果主实例失败，Neptune 将只读副本实例提升为主实例。当这种情况发生时，在提升的实例重启时会出现短暂的中断（通常少于 30 秒），在此期间，对主实例的读写请求将失败，同时引发异常。要获得最高的可靠性，请考虑在不同的可用区中使用两个只读副本。如果可用区 1 中的主实例离线，则可用区 2 中的实例会升级为主实例，但是在这种情况发生时它无法处理查询。因此，在过渡期间，需要可用区 3 中的实例来处理读取查询。

如果您使用的是 Neptune 无服务器，则所有可用区中的读取器和写入器实例将根据数据库负载相互独立地纵向扩展和缩减。您可以将读取器实例的提升层设置为 0 或 1，这样它就可以随写入器实例的容量一起纵向扩展和缩减。这样，它随时可以接管当前工作负载。

如果您的应用程序遍布全球或需要[多区域故障转移](https://docs.aws.amazon.com/neptune/latest/userguide/neptune-gdb-disaster-recovery.html)，请考虑使用 [Neptun](https://docs.aws.amazon.com/neptune/latest/userguide/neptune-global-database.html) e 全局数据库。Amazon Neptune 全球数据库跨越多个数据库 AWS 区域，可实现低延迟的全局读取，并在极少数中断影响整个数据库的情况下提供快速恢复。 AWS 区域 Neptune 全局数据库由一个区域中的主数据库集群和位于不同区域的多达五个辅助数据库集群组成。

## 管理和扩展 Neptune 集群
<a name="managing-and-scaling-neptune-clusters"></a>

您可以使用 [Neptune 自动扩缩](https://docs.aws.amazon.com/neptune/latest/userguide/manage-console-autoscaling.html)来自动调整数据库集群中 Neptune 副本的数量，以满足您的连接和工作负载要求。通过自动扩缩，您的 Neptune 数据库集群可以应对工作负载的突然增加。工作负载减少时，自动扩缩会删除不必要的副本，这样您就不会为未使用的容量付费。请注意，启动新实例可能需要长达 15 分钟的时间，因此仅靠自动扩缩不足以应对需求的快速变化。

您只能对已经有一个主写入器实例和至少一个只读副本实例的 Neptune 数据库集群使用自动扩缩（[请参阅 Amazon Neptune 数据库集群和实例](https://docs.aws.amazon.com/neptune/latest/userguide/feature-overview-db-clusters.html)）。此外，集群中的所有只读副本实例都必须处于可用状态。如果任何只读副本处于除可用状态以外的状态，则在集群中的每个只读副本都可用之前，Neptune 自动扩缩不会执行任何操作。

如果您遇到需求的快速变化，请考虑使用无服务器实例。无服务器实例可以在短时间内垂直扩展，而自动扩缩可以在较长的时间段内水平扩展。此配置提供了最佳的可扩展性，因为无服务器实例可以垂直扩展，而自动扩缩则实例化新的只读副本以处理超出单个无服务器实例最大容量的工作负载。有关 Amazon Neptune Serverless 容量扩展的更多信息，请参阅 [Neptune 无服务器数据库集群中的容量扩展](https://docs.aws.amazon.com/neptune/latest/userguide/neptune-serverless-capacity-scaling.html)。

如果您的扩展需求在可预测的时间发生变化，则可以[计划更改](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html)最小实例数、最大实例数和阈值，以更好地应对这些不断变化的需求。请记住至少提前 15 分钟安排横向扩展事件，以便这些实例在需要时可以上线。

通过使用数据库参数组中的[参数](https://docs.aws.amazon.com/neptune/latest/userguide/parameter-groups.html)，在 Amazon Neptune 中管理数据库配置。参数组就像是引擎配置值的*容器*，这些值可应用于一个或多个数据库实例。修改参数组中的集群参数时，了解静态参数和动态参数之间的区别，以及如何和何时进行应用。使用[状态](https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-status.html)端点查看当前应用的配置。

## 管理备份和失效转移事件
<a name="backup-failure"></a>

Neptune 自动备份您的集群卷，并在*备份保留期*内保留备份的数据。Neptune 备份是连续且递增的，因此，您可以快速还原到备份保留期内的任何时间点。在创建或修改数据库集群时，可指定 1-35 天备份保留期。

要将备份保留期延长，您还可以为集群卷中的数据创建快照。存储快照会产生 Neptune 的标准存储费用。

在创建数据库集群的 Amazon Neptune 快照时，Neptune 创建集群的存储卷快照，同时备份集群的所有数据，而不仅仅是各个实例。您随后可通过从该数据库集群快照还原来创建新的数据库集群。恢复数据库集群时，您需要提供用于恢复的数据库集群快照的名称，然后提供恢复所创建的新数据库集群的名称。

测试您的系统如何响应失效转移事件。使用 Neptune API [强制执行失效转移事件](https://docs.aws.amazon.com/neptune/latest/apiref/API_FailoverDBCluster.html)。如果需要模拟数据库实例故障以进行测试，或是在失效转移进行之后将操作恢复到原始可用区，[通过失效转移重启](https://docs.aws.amazon.com/neptune/latest/apiref/API_RebootDBInstance.html)十分有用。有关更多信息，请参阅[配置和管理多可用区部署](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html)。当您重启数据库写入器集群时，它会失效转移到备用副本。重启 Neptune 副本不会初始化失效转移。

设计客户端时要注重可靠性。测试它们在失效转移事件期间的行为。使用指数回退逻辑在客户端中实现重试逻辑。可以在 [Amazon Neptune AWS Lambda 函数示例下的文档中找到实现此逻辑的代码示例](https://docs.aws.amazon.com/neptune/latest/userguide/lambda-functions-examples.html)。

如果您有一组适用于多个数据库引擎的常见备份要求，请考虑使用 [AWS Backup](https://aws.amazon.com/blogs/storage/centralizing-data-protection-and-compliance-for-amazon-neptune-with-aws-backup/)。