在 Lambda 中使用 Gremlin 读取请求的建议 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Lambda 中使用 Gremlin 读取请求的建议

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

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

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

如果您正在编写需要在集群中的实例之间平衡读取请求的 Java Lambda 函数,则可以使用适用于 Amazon Neptune 的 Gremlin 客户端,这是一款 Java Gremlin 客户端,它知道您的集群拓扑,可以公平地在 Neptune 集群中的一组实例间分配连接和请求。这篇博客文章包括一个使用适用于 Amazon Neptune 的 Gremlin 客户端的 Java Lambda 函数示例。