View a markdown version of this page

Verwalten Sie Verbindungspools und den Lebenszyklus in containerisierten Umgebungen - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwalten Sie Verbindungspools und den Lebenszyklus in containerisierten Umgebungen

Die effektive Verwaltung von Verbindungen zu Neptune ist in containerisierten Umgebungen, in denen Container (Pods in Kubernetes) häufig gestartet, gestoppt und skaliert werden, unerlässlich. Neptune erzwingt mehrere WebSocket Verbindungslimits:

Einige Treiber unterstützen regelmäßige Keep-Alive-Heartbeats, um Verbindungsabbrüche im Leerlauf zu verhindern. Beispielsweise keepAliveInterval sendet der Gremlin-Java-Treiber regelmäßig einen Ping an den Server. Ermitteln Sie anhand der Konfigurationsoptionen Ihres jeweiligen Treibers, welche Keep-Alive-Einstellungen verfügbar sind und wie sie mit dem Leerlauf-Timeout von Neptune interagieren.

Wenn Sie diese Grenzen kennen, können Sie die Verbindungsverwaltung so gestalten, dass sie gut mit Container-Orchestrierungsmustern wie rollierenden Bereitstellungen, Autoscaling und Container-Recycling funktioniert. Allgemeine Hinweise zur Verbindungsverwaltung mit dem Java-Gremlin-Treiber finden Sie unter und. Schließen des Clients zur Vermeidung des Verbindungs-Limits Erstellen einer neuen Verbindung nach einem Failover

Schließen Sie die Verbindungen beim Herunterfahren des Containers

Implementieren Sie ein ordnungsgemäßes Herunterfahren, indem Sie einen SIGTERM Handler hinzufügen, der Ihren Graph-Client schließt, bevor der Container beendet wird. Rufen Sie zum Beispiel Gremlin Javascluster.close(), Gremlins driverRemoteConnection.close() in Go oder Python oder Bolts driver.close() für den Neo4j-Treiber auf. Verwenden Sie in Kubernetes einen preStop Hook, um Verbindungen abzuleiten, bevor SIGTERM sie gesendet werden, insbesondere bei fortlaufenden Updates.

Anmerkung

Docker und Amazon ECS liefern nur SIGTERM an PID 1 im Container. Verwenden Sie das Exec-Formular in Ihrem Dockerfile (z. B. ENTRYPOINT ["java", "-jar", "app.jar"] nichtENTRYPOINT java -jar app.jar) oder einen Init-Prozess, tini um sicherzustellen, dass Ihre Anwendung das Signal empfängt.

Verwenden Sie eine einzelne Client-Instanz pro Container

Das Erstellen mehrerer Gremlin DriverRemoteConnection - oder neo4j.Driver Bolt-Instanzen im selben Container vervielfacht die Verbindungsnutzung. Teilen Sie eine einzelne Client-Instanz für alle Threads im Container. Die Client-Objekte sind threadsicher.

Größe der Verbindungspools im Verhältnis zu Ihrer Flotte

Stellen Sie maxConnectionPoolSize es so ein, dass die Gesamtzahl der Verbindungen in allen Containern das Verbindungslimit für Neptune-Instanzen nicht überschreitet. Wenn Sie beispielsweise 20 Container mit jeweils 8 Threads ausführen, berechnen Sie die Poolgröße pro Container so, dass das 20-fache der Poolgröße innerhalb des Instance-Limits für Ihren Instance-Typ bleibt. Weitere Informationen zur Konfiguration der Verbindungspoolgrößen finden Sie unterSetzen Sie maxInProcessPerConnection und maxSimultaneousUsagePerConnection auf den selben Wert..

Legen Sie ein Timeout für die Verbindungswartezeit fest

Stellen Sie im Java-Gremlin-Treiber einen angemessenen Wert einmaxWaitForConnection, z. B. 5—10 Sekunden. Die Standardeinstellung ist oft unendlich oder sehr lang, was dazu führt, dass Threads hängen bleiben, wenn der Pool erschöpft ist, und nicht schnell mit einem eindeutigen Fehler ausfallen. Nicht alle Sprachtreiber unterstützen diese Einstellung. Die entsprechende Konfigurationsoption finden Sie in der Dokumentation Ihres Treibers.