

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

# Neptune 和 Neo4j 之间的架构差异
<a name="migration-architectural-differences"></a>

当客户第一次考虑将应用程序从 Neo4j 迁移到 Neptune 时，通常会倾向于根据实例大小进行 like-to-like比较。但是，Neo4j 和 Neptune 的架构有根本的区别。Neo4j 基于一种 all-in-one方法，即数据加载、数据 ETL、应用程序查询、数据存储和管理操作都发生在同一组计算资源中，例如 EC2 实例。

相比之下，Neptune 是一个以 OLTP 为中心的图形数据库，其中，架构将职责分开，且资源是解耦的，因此它们可以动态和独立地扩展。

从 Neo4j 迁移到 Neptune 时，请确定应用程序的数据持久性、可用性和可扩展性要求。Neptune 的集群架构简化了需要高耐久性、高可用性和高可扩展性的应用程序的设计。了解 Neptune 的集群架构后，就可以设计出满足这些要求的 Neptune 集群拓扑了。

## Neo4j 的集群架构
<a name="migration-neo4j-cluster-architecture"></a>

许多生产应用程序使用 Neo4j 的[因果集群](https://neo4j.com/docs/operations-manual/current/clustering/introduction/)来提供数据持久性、高可用性和可扩展性。Neo4j 的集群架构使用核心服务器和只读副本实例：
+ 核心服务器通过使用 Raft 协议复制数据，提供数据持久性和容错能力。
+ 只读副本使用事务日志传送，以异步复制高读取吞吐量工作负载的数据。

集群中的每个实例，无论是核心服务器还是只读副本，都包含图形数据的完整副本。

## Neptune 的集群架构
<a name="migration-neptune-cluster-architecture"></a>

[Neptune 集群](feature-overview-db-clusters.md)由一个主写入器实例和最多 15 个只读副本实例组成。集群中的所有实例共享与实例分开的相同底层分布式存储服务。
+ 主写入器实例协调对于数据库的所有写入操作，并且可以垂直扩展，为不同的写入工作负载提供灵活的支持。它还支持读取操作。
+ 只读副本实例支持从底层存储卷进行读取操作，并允许您水平扩展以支持高的读取工作负载。它们还通过充当主实例的失效转移目标来提供高可用性。
**注意**  
对于繁重的写入工作负载，最好将只读副本实例扩展到与写入器实例相同的大小，以确保读取器能够与数据变化保持一致。
+ 随着数据库中数据的增加，底层存储卷自动扩展存储容量，最多可达 128TiB 存储空间。

实例大小是动态且独立的。可以在集群运行时调整每个实例的大小，也可以在集群运行时添加或移除只读副本。

随着需求上升和下降，[Neptune 无服务器](neptune-serverless.md)特征可以自动纵向扩展和缩减您的计算容量。这不仅可以减少管理开销，还可以让您将数据库配置为在不降低性能或要求您过度预调配的情况下处理需求激增的状况。

您可以停止 Neptune 数据库集群最多 7 天。

Neptune 还支持[自动扩缩](manage-console-autoscaling.md)，可根据工作负载自动调整读取器实例的大小。

使用 Neptune 的[全球数据库特征](neptune-global-database.md)，您最多可以在其它 5 个区域中镜像集群。

Neptune [在设计上也是容错的](backup-restore-overview-fault-tolerance.md)：
+ 为集群中的所有实例提供数据存储的集群卷在单个 AWS 区域可用区 (AZs) 中跨越多个可用区 ()。每个可用区均包含集群数据的一个完整副本。
+ 如果主实例变得不可用，Neptune 会自动失效转移到现有的只读副本，数据丢失为零，通常在 30 秒内完成。如果集群中没有现有的只读副本，Neptune 会自动预调配一个新的主实例，同样不会丢失任何数据。

所有这些都意味着，从 Neo4j 因果集群迁移到 Neptune 时，您不必为了获得较高的数据持久性和高可用性而显式设计集群拓扑。这使您可以通过以下几种方式调整集群的大小，以满足预期的读取和写入工作负载以及任何可能增加的可用性要求：
+ 要扩展读取操作，请[添加只读副本实例](feature-overview-db-clusters.md#feature-overview-read-replicas)或启用 [Neptune 无服务器](neptune-serverless.md)功能。
+ 要提高可用性，请将集群中的主实例和只读副本分布到多个可用区 (AZs)。
+ 要缩短任何失效转移时间，请预调配至少一个可作为主实例的失效转移目标的只读副本实例。您可以通过[为每个副本分配优先级](manage-console-add-replicas.md)，确定在发生故障后将只读副本实例提升为主实例的顺序﻿。最佳实践是确保失效转移目标所具有的实例类在提升为主实例后，能够处理应用程序的写入工作负载。