View a markdown version of this page

컨테이너화된 환경에서 연결 풀 및 수명 주기 관리 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

컨테이너화된 환경에서 연결 풀 및 수명 주기 관리

컨테이너(Kubernetes의 포드)가 자주 시작, 중지 및 확장되는 컨테이너화된 환경에서는 Neptune에 대한 연결을 효과적으로 관리하는 것이 필수적입니다. Neptune은 여러 WebSocket 연결 제한을 적용합니다.

  • 각 인스턴스 유형에는 최대 동시 WebSocket 연결 수가 있습니다.

  • 20~25분 동안 사용하지 않으면 유휴 연결이 닫힙니다.

  • IAM 인증을 사용하면 활동에 관계없이 10일 후에 연결이 강제로 종료됩니다(WebSocket 연결 제한 참조).

일부 드라이버는 유휴 연결 해제를 방지하기 위해 주기적 연결 유지 하트비트를 지원합니다. 예를 들어 Gremlin Java 드라이버는 서버에 주기적 ping을 keepAliveInterval 전송합니다. 사용 가능한 연결 유지 설정과 Neptune의 유휴 제한 시간과 상호 작용하는 방법을 확인하려면 특정 드라이버의 구성 옵션을 참조하세요.

이러한 제한을 이해하면 롤링 배포, 오토 스케일링 및 컨테이너 재활용과 같은 컨테이너 오케스트레이션 패턴에 적합한 연결 처리를 설계하는 데 도움이 됩니다. Java Gremlin 드라이버와의 연결 관리에 대한 일반적인 지침은 클라이언트를 닫아 연결 제한 방지 및 섹션을 참조하세요장애 조치 후 새로운 연결 생성.

컨테이너 종료 시 연결 닫기

컨테이너가 종료되기 전에 그래프 클라이언트를 닫는 SIGTERM 핸들러를 추가하여 정상적인 종료를 구현합니다. 예를 들어 Neo4j 드라이버의 경우 Gremlin Java의 cluster.close(), Go 또는 PythondriverRemoteConnection.close()의 Gremlin의 또는 Bolt의 driver.close()를 호출합니다. Kubernetes에서는 특히 롤링 업데이트 중에 SIGTERM가 전송되기 전에 preStop 후크를 사용하여 연결을 드레이닝합니다.

참고

Docker와 Amazon ECS는 컨테이너의 SIGTERM PID 1에만 전송합니다. 애플리케이션이 신호를 수신하도록 tini하려면 Dockerfile에서 exec 양식(예:가 ENTRYPOINT ["java", "-jar", "app.jar"] 아님ENTRYPOINT java -jar app.jar) 또는와 같은 init 프로세스를 사용합니다.

컨테이너당 단일 클라이언트 인스턴스 사용

동일한 컨테이너에서 여러 Gremlin DriverRemoteConnection 또는 Bolt neo4j.Driver 인스턴스를 생성하면 연결 사용량이 곱해집니다. 컨테이너의 모든 스레드에서 단일 클라이언트 인스턴스를 공유합니다. 클라이언트 객체는 스레드 세이프입니다.

플릿에 상대적인 연결 풀 크기 조정

모든 컨테이너의 총 연결이 Neptune 인스턴스 연결 제한을 초과하지 maxConnectionPoolSize 않도록를 설정합니다. 예를 들어 각각 스레드가 8개인 컨테이너 20개를 실행하는 경우 20 × 풀 크기가 인스턴스 유형의 인스턴스 제한 내에 유지되도록 컨테이너당 풀 크기를 계산합니다. 연결 풀 크기 구성에 대한 자세한 내용은 섹션을 참조하세요maxInProcessPerConnection 및 maxSimultaneousUsagePerConnection을 동일한 값으로 설정.

연결 대기 제한 시간 설정

Java Gremlin 드라이버에서 maxWaitForConnection를 5~10초와 같은 적절한 값으로 구성합니다. 기본값은 종종 무한 또는 매우 길기 때문에 명확한 오류와 함께 빠르게 실패하지 않고 풀이 소진될 때 스레드가 중단됩니다. 모든 언어 드라이버가이 설정을 지원하는 것은 아닙니다. 드라이버 설명서에서 동등한 구성 옵션을 확인하세요.