

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

# 连接到 Amazon Neptune 端点
<a name="feature-overview-endpoints"></a>

Amazon Neptune 使用数据库实例的集群而不是单个实例。每个 Neptune 连接均由特定的数据库实例处理。在连接到 Neptune 集群时，您指定的主机名和端口将指向名为*端点*的中间处理程序。终端节点是包含主机地址和端口的 URL。Neptune 端点使用加密的（传输层Security/Secure Sockets Layer (TLS/SSL）连接。

Neptune 使用端点机制来抽象这些连接，以便您不必对主机名进行硬编码，也不必在某些数据库实例不可用时编写自己的逻辑来重新路由连接。

通过使用端点，您可以根据用例将每个连接映射到相应的实例或实例组。自定义端点允许您连接到数据库实例的子集。Neptune 数据库集群中提供以下端点：

## Neptune 集群端点
<a name="feature-overview-cluster-endpoints"></a>

集群端点是 Neptune 数据库集群的一个端点，连接到该数据库集群的当前主数据库实例。每个 Neptune 数据库集群都具有集群端点和一个主数据库实例。

集群终端节点为数据库集群的 read/write 连接提供故障转移支持。对数据库集群上的所有写入操作使用集群终端节点，这些操作包括插入、更新、删除和数据定义语言 (DDL) 更改。您还可以对读取操作（如查询）使用集群端点。

如果数据库集群的当前主数据库实例失败，Neptune 将自动失效转移到新的主数据库实例。在故障转移期间，数据库集群将继续为从新的主数据库实例到集群终端节点的请求提供服务，对服务造成的中断最少。

以下示例介绍 Neptune 数据库集群中的集群端点。

`mydbcluster.cluster-123456789012.us-east-1.neptune.amazonaws.com:8182`

## Neptune 读取器端点
<a name="feature-overview-reader-endpoints"></a>

读取器端点是 Neptune 数据库集群的一个端点，连接到该数据库集群的可用 Neptune 副本之一。每个 Neptune 数据库集群都具有一个读取器端点。如果有多个 Neptune 副本，则读取器端点会将每个连接请求定向到 Neptune 副本之一。

读取器终端节点为数据库集群的只读连接提供轮询路由。对读取操作（如 查询）使用读取器端点。

除非您拥有单实例集群（没有只读副本的集群），否则您无法将读取器终端节点用于写入操作。当且仅当在这种情况下，读取器可以用于写入操作以及读取操作。

读取器终端节点轮询路由的运行方式是更改 DNS 条目指向的主机。每次解析 DNS 时，你会得到一个不同的 IP，并且会针对这些IP打开连接 IPs。建立连接之后，对于该连接的所有请求将发送到同一个主机。客户端必须创建新连接并再次解析 DNS 记录，以获取到可能不同的只读副本的连接。

**注意**  
WebSockets 连接通常会长时间保存。要获取不同的只读副本，请执行以下操作：  
确保您的客户端在每次连接时都会解析 DNS 条目。
关闭连接，然后重新连接。

不同的客户端软件可能在解析 DNS 的方式上各有不同。例如，如果您的客户端解析 DNS，然后对于每个连接使用该 IP，则它会将所有请求定向到单个主机。

客户端或代理的 DNS 缓存将 DNS 名称解析为缓存中的相同终端节点。这对于轮询路由和故障转移场景都是一个问题。

**注意**  
禁用任何 DNS 缓存设置以每次强制执行 DNS 解析。

数据库集群在可用 Neptune 副本之间分配对读取器端点的连接请求。如果数据库集群只包含主数据库实例，则读取方终端节点从主数据库实例为连接请求提供服务。如果为该数据库集群创建了 Neptune 副本，则读取器端点将从新 Neptune 副本继续为针对读取器端点的连接请求提供服务，对服务造成的中断最少。

以下示例介绍 Neptune 数据库集群的读取器端点。

`mydbcluster.cluster-ro-123456789012.us-east-1.neptune.amazonaws.com:8182`

## Neptune 实例端点
<a name="feature-overview-instance-endpoints"></a>

实例端点是 Neptune 数据库集群中数据库实例的一个端点，连接到该特定数据库实例。数据库集群中的每个数据库实例具有自己的唯一实例终端节点，而不论具有何种实例类型。因此，数据库集群的当前主数据库实例具有一个实例终端节点。数据库集群中的每个 Neptune 副本也都具有一个实例端点。

对于可能不适合使用集群终端节点或读取器终端节点的场景，实例终端节点提供对与数据库集群连接的直接控制。例如，您的客户端应用程序可能根据工作负载类型需要精细的负载均衡。在这种情况下，您可以配置多个客户端以连接到数据库集群中的不同 Neptune 副本，以便分配读取工作负载。

以下示例介绍 Neptune 数据库集群中数据库实例的实例端点。

`mydbinstance.123456789012.us-east-1.neptune.amazonaws.com:8182`

## Neptune 自定义端点
<a name="feature-overview-custom-endpoints"></a>

Neptune 集群的自定义端点表示一组选定数据库实例。在连接到端点时，Neptune 选择组中的实例之一来处理连接。您可以定义此终端节点引用的实例，并确定此终端节点的用途。

在创建自定义端点之前，Neptune 数据库集群没有自定义端点，您可以为每个预调配的 Neptune 集群创建最多五个自定义端点。

自定义终端节点根据数据库实例的只读或 read/write 功能以外的标准提供负载平衡的数据库连接。因为连接可以转到与端点关联的任何数据库实例，所以，请确保该组中的所有实例共享相同的性能和内存容量特征。在使用自定义终端节点时，通常不使用该集群的读取器终端节点。

此特征适用于具有特殊类型的工作负载的高级用户，在这些工作负载下，使集群中的所有 Neptune 副本保持相同是不切实际的。利用自定义端点，您可以调整用于每个连接的数据库实例的容量。

例如，如果您定义了多个自定义端点，这些端点连接到具有不同实例类的实例组，则可以将具有不同性能需求的用户定向到最适合其用例的端点。

以下示例介绍 Neptune 数据库集群中数据库实例的自定义端点：

`myendpoint.cluster-custom-123456789012.us-east-1.neptune.amazonaws.com:8182`

请参阅[使用自定义端点](feature-custom-endpoint-membership.md)了解更多信息。

## Neptune 端点注意事项
<a name="feature-overview-endpoint-considerations"></a>

使用 Neptune 端点时，请考虑以下问题：
+ 使用实例终端节点连接到数据库集群中的特定数据库实例之前，请考虑改为对数据库集群使用集群终端节点或读取方终端节点。

  集群终端节点和读取方终端节点可提供对高可用性场景的支持。如果数据库集群的主数据库实例失败，Neptune 将自动失效转移到新的主数据库实例。它通过将现有 Neptune 副本提升为新的主数据库实例或者创建新的主数据库实例来完成该操作。如果发生了失效转移，您可以使用集群端点重新连接到新提升或新创建的主数据库实例，或者使用读取器端点重新连接到数据库集群中的其它 Neptune 副本之一。

  如果未采用此方法，您仍可以确保连接到数据库集群中的合适数据库实例来执行目标操作。为此，您可以在故障转移之后，以手动或以编程方式先搜索数据库集群中得到的可用数据库实例集，并确认其实例类型，然后再使用特定数据库实例的实例终端节点。

  有关失效转移的更多信息，请参阅[Neptune 数据库集群的容错能力](backup-restore-overview-fault-tolerance.md)。

   
+ 读取器端点仅将连接定向到 Neptune 数据库集群中的可用 Neptune 副本。它不会定向特定查询。
**重要**  
Neptune 不会执行负载均衡。

  如果您要实现查询的负载均衡以分配数据库集群的读取工作负载，则必须在应用程序中进行管理。您必须使用实例端点直接连接到 Neptune 副本以进行负载平衡。

   
+ 读取器终端节点轮询路由的运行方式是更改 DNS 条目指向的主机。客户端必须创建新连接并再次解析 DNS 记录，以获取到可能新的只读副本的连接。

   
+ 在失效转移期间，如果将 Neptune 副本提升为新的主数据库实例，则读取器端点可能会在短时间内将连接定向到数据库集群的新的主数据库实例。