

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

# 在 Lambda 中使用 Gremlin 读取请求的建议
<a name="lambda-functions-gremlin-read-recommendations"></a>

如果您的集群中有一个或多个只读副本，则最好在这些副本之间平衡读取请求。一种选择是使用[读取器端点](feature-overview-endpoints.md)。即使在您添加或删除副本或将副本提升为新的主实例时，集群拓扑发生了变化，读取器端点也会平衡副本间的连接。

但是，在某些情况下，使用读取器端点可能会导致集群资源的使用不均衡。读取器端点的工作方式是定期更改 DNS 条目指向的主机。如果客户端在 DNS 条目更改之前打开了大量连接，则所有连接请求都将发送到单个 Neptune 实例。高吞吐量 Lambda 场景可能就是这种情况，在这种场景中，对 Lambda 函数的大量并发请求会导致创建多个执行上下文，每个上下文都有自己的连接。如果这些连接几乎同时创建，则这些连接很可能都指向集群中的同一个副本，并且一直指向该副本，直到执行上下文被回收为止。

跨实例分配请求的一种方法是将 Lambda 函数配置为连接到从副本实例端点列表中随机选择的实例端点，而不是读取器端点。这种方法的缺点是，它要求 Lambda 代码通过监控集群并在集群成员资格发生变化时更新端点列表，来处理集群拓扑的变化。

如果您正在编写需要在集群中的实例之间平衡读取请求的 Java Lambda 函数，则可以使用[适用于 Amazon Neptune 的 Gremlin 客户端](https://github.com/aws/neptune-gremlin-client)，这是一款 Java Gremlin 客户端，它知道您的集群拓扑，可以公平地在 Neptune 集群中的一组实例间分配连接和请求。[这篇博客文章](https://aws.amazon.com/blogs/database/load-balance-graph-queries-using-the-amazon-neptune-gremlin-client/)包括一个使用适用于 Amazon Neptune 的 Gremlin 客户端的 Java Lambda 函数示例。