本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理容器化环境中的连接池和生命周期
在容器(Kubernetes 中的 pod)频繁启动、停止和扩展的容器化环境中,有效管理与 Neptune 的连接至关重要。Neptune 强制执行多个 WebSocket 连接限制:
每种实例类型都有最大并发WebSocket 连接数
闲置连接将在闲置 20—25 分钟后关闭
使用 IAM 身份验证,无论活动如何,连接都会在 10 天后强制关闭(参见WebSocket 连接限制)
某些驱动程序支持定期保持活动状态的心跳,以防止空闲断开连接。例如,Gremlin Java 驱动程序会定期keepAliveInterval向服务器发送 ping 命令。请查阅特定驱动程序的配置选项,以确定哪些保持活动状态设置可用,以及它们如何与 Neptune 的空闲超时交互。
了解这些限制可以帮助你设计出适用于滚动部署、自动扩展和容器回收等容器编排模式的连接处理。有关使用 Java Gremlin 驱动程序进行连接管理的一般指南,请参阅关闭客户端以避免连接限制和。在失效转移后创建新连接
容器关闭时关闭连接
通过添加一个SIGTERM处理程序来实现优雅的关闭,该处理程序可在容器退出之前关闭您的图形客户端。例如,调用 Gremlin Java cluster.close()、G driverRemoteConnection.close() o 或 Python 中的 Gremlin,或者为 Neo4j 驱动程序调用 Bolt' driver.close() s。在 Kubernetes 中,在发送连接之前SIGTERM,尤其是在滚动更新期间,使用preStop钩子来耗尽连接。
注意
Docker 和 Amazon ECS 只能SIGTERM向集装箱中的 PID 1 配送。使用 Dockerfile 中的 exec 表单(例如,ENTRYPOINT ["java", "-jar", "app.jar"]不是ENTRYPOINT java -jar app.jar)或诸如此类的初始化进程,tini以确保您的应用程序收到信号。
每个容器使用一个客户端实例
在同一个容器中创建多个 Gremlin DriverRemoteConnection 或 Bolt neo4j.Driver 实例会使连接使用量成倍增加。在容器中的所有线程之间共享一个客户端实例。客户端对象是线程安全的。
相对于您的队列调整连接池的大小
设置maxConnectionPoolSize为所有容器之间的总连接数不超过 Neptune 实例的连接限制。例如,如果您运行 20 个容器,每个容器有 8 个线程,请计算每个容器的池大小,使 20 倍的池大小保持在您的实例类型的实例限制范围内。有关配置连接池大小的更多信息,请参阅将 maxInProcessPerConnection 和 maxSimultaneousUsagePerConnection 设置为相同值。
设置连接等待超时
在 Java Gremlin 驱动程序中,maxWaitForConnection将配置为合理的值,例如 5—10 秒。默认值通常是无限或很长,这会导致线程在池耗尽时挂起,而不是因为明显的错误而快速失败。并非所有语言驱动程序都支持此设置,请查看驱动程序文档以了解等效的配置选项。