View a markdown version of this page

在容器化環境中管理連線集區和生命週期 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在容器化環境中管理連線集區和生命週期

在容器化環境中 (Kubernetes 中的 Pod) 頻繁啟動、停止和擴展容器化環境中,有效管理 Neptune 的連線至關重要。Neptune 會強制執行數個 WebSocket 連線限制:

  • 每個執行個體類型都有最大數量的並行 WebSocket 連線

  • 閒置連線會在閒置 20-25 分鐘後關閉

  • 透過 IAM 身分驗證,無論活動為何,連線都會在 10 天後強制關閉 (請參閱 WebSocket 連線限制)

有些驅動程式支援定期保持活動訊號,以防止閒置中斷連線。例如,Gremlin Java 驅動程式的 keepAliveInterval會定期將 ping 傳送至伺服器。請參閱特定驅動程式的組態選項,以判斷可用的持續連線設定,以及它們如何與 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) 或像 這樣的初始化程序tini,以確保您的應用程式收到訊號。

每個容器使用單一用戶端執行個體

在相同容器中建立多個 Gremlin DriverRemoteConnection或 Bolt neo4j.Driver執行個體會乘以連線用量。跨容器中的所有執行緒共用單一用戶端執行個體。用戶端物件為執行緒安全。

相對於機群的大小連線集區

設定 ,maxConnectionPoolSize讓所有容器的總連線數不超過 Neptune 執行個體連線限制。例如,如果您執行 20 個容器,每個容器各有 8 個執行緒,請計算每個容器集區大小,讓 20 × 集區大小保持在執行個體類型的執行個體限制內。如需設定連線集區大小的詳細資訊,請參閱 將 maxInProcessPerConnection 和 maxSimultaneousUsagePerConnection 設定為相同值。

設定連線等待逾時

在 Java Gremlin 驅動程式中,maxWaitForConnection將 設定為合理的值,例如 5–10 秒。預設值通常是無限的或很長的,這會導致在集區耗盡時停止執行緒,而不是在明確錯誤的情況下快速失敗。並非所有語言驅動程式都支援此設定 - 請查看驅動程式的文件以取得同等組態選項。