

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

# 在容器化環境中管理連線集區和生命週期
<a name="best-practices-ecs-eks-connections"></a>

在容器化環境中 (Kubernetes 中的 Pod) 頻繁啟動、停止和擴展容器化環境中，有效管理 Neptune 的連線至關重要。Neptune 會強制執行數個 WebSocket 連線限制：
+ 每個執行個體類型都有最大數量的並行 [WebSocket 連線](https://docs.aws.amazon.com/neptune/latest/userguide/limits.html#limits-websockets)
+ 閒置連線會在閒置 20-25 分鐘後關閉
+ 透過 IAM 身分驗證，無論活動為何，連線都會在 10 天後強制關閉 （請參閱 [WebSocket 連線限制](https://docs.aws.amazon.com/neptune/latest/userguide/limits.html#limits-websockets))

有些驅動程式支援定期保持活動訊號，以防止閒置中斷連線。例如，Gremlin Java 驅動程式的 `keepAliveInterval`會定期將 ping 傳送至伺服器。請參閱特定驅動程式的組態選項，以判斷可用的持續連線設定，以及它們如何與 Neptune 的閒置逾時互動。

了解這些限制可協助您設計與容器協同運作模式相容的連線處理，例如滾動部署、自動擴展和容器回收。如需使用 Java Gremlin 驅動程式進行連線管理的一般指引，請參閱 [關閉用戶端以避免連線限制](best-practices-gremlin-java-close-connections.md)和 [在容錯移轉之後建立新連線](best-practices-gremlin-java-new-connection.md)。

**在容器關閉時關閉連線**

透過新增在容器結束之前關閉圖形用戶端的`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 × 集區大小保持在[執行個體類型的執行個體限制](https://docs.aws.amazon.com/neptune/latest/userguide/limits.html#limits-websockets)內。如需設定連線集區大小的詳細資訊，請參閱 [將 `maxInProcessPerConnection` 和 `maxSimultaneousUsagePerConnection` 設定為相同值。](best-practices-gremlin-java-maxes.md)。

**設定連線等待逾時**

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