View a markdown version of this page

コンテナ化された環境で接続プールとライフサイクルを管理する - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

コンテナ化された環境で接続プールとライフサイクルを管理する

Neptune への接続を効果的に管理することは、コンテナ (Kubernetes のポッド) が頻繁に起動、停止、スケーリングされるコンテナ化された環境で不可欠です。Neptune は、いくつかの WebSocket 接続制限を適用します。

  • 各インスタンスタイプには、同時 WebSocket 接続の最大数があります。

  • アイドル接続は 20~25 分間非アクティブになると閉じられます

  • IAM 認証では、アクティビティに関係なく、接続は 10 日後に強制的に閉じられます (WebSocket 接続制限」を参照)。

一部のドライバーは、アイドル状態の切断を防ぐために、定期的なキープアライブハートビートをサポートしています。たとえば、Gremlin Java ドライバーの は、サーバーに定期的な ping keepAliveIntervalを送信します。特定のドライバーの設定オプションを参照して、使用可能なキープアライブ設定と、それらが Neptune のアイドルタイムアウトとどのように相互作用するかを判断します。

これらの制限を理解することで、ローリングデプロイ、自動スケーリング、コンテナリサイクルなどのコンテナオーケストレーションパターンに適した接続処理を設計できます。Java Gremlin ドライバーとの接続管理に関する一般的なガイダンスについては、接続制限を回避するためにクライアントを閉じる「」および「」を参照してくださいフェイルオーバー後の新しい接続の作成

コンテナのシャットダウン時に接続を閉じる

コンテナが終了する前にグラフクライアントを閉じるSIGTERMハンドラーを追加して、正常なシャットダウンを実装します。例えば、Gremlin Java の cluster.close()、Go または Python driverRemoteConnection.close()の Gremlin の 、または Neo4j ドライバーdriver.close()の Bolt の を呼び出します。Kubernetes では、 が送信される前に、特にローリング更新中にpreStopフックを使用して接続をドレインSIGTERMします。

注記

Docker と Amazon ECS SIGTERMは、コンテナ内の PID 1 にのみ配信します。Dockerfile の exec フォーム ( ENTRYPOINT ["java", "-jar", "app.jar"]ではないなどENTRYPOINT java -jar app.jar) または のような init プロセスtiniを使用して、アプリケーションがシグナルを受信するようにします。

コンテナごとに 1 つのクライアントインスタンスを使用する

同じコンテナに複数の Gremlin DriverRemoteConnectionまたは Bolt neo4j.Driverインスタンスを作成すると、接続使用量が乗算されます。コンテナ内のすべてのスレッドで 1 つのクライアントインスタンスを共有します。クライアントオブジェクトはスレッドセーフです。

フリートに対する接続プールのサイズ

すべてのコンテナの合計接続数が Neptune インスタンス接続制限を超えないmaxConnectionPoolSizeように を設定します。たとえば、それぞれ 8 つのスレッドで 20 個のコンテナを実行する場合は、コンテナごとのプールサイズを計算して、20 倍のプールサイズがインスタンスタイプのインスタンス制限内に収まるようにします。接続プールサイズの設定の詳細については、「」を参照してくださいmaxInProcessPerConnection と maxSimultaneousUsagePerConnection を使用し、値を同じに設定してください。

接続待機タイムアウトを設定する

Java Gremlin ドライバーで、 maxWaitForConnectionを 5~10 秒などの妥当な値に設定します。多くの場合、デフォルトは無限または非常に長いため、プールが枯渇したときにスレッドがハングし、明確なエラーですぐに失敗することはありません。すべての言語ドライバーがこの設定をサポートしているわけではありません。ドライバーのドキュメントで同等の設定オプションを確認してください。