Bewährte Methoden für AWS SDK for Java 2.x - AWS SDK for Java 2.x

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.

Bewährte Methoden für AWS SDK for Java 2.x

In diesem Abschnitt werden bewährte Methoden für die Verwendung des SDK for Java 2.x aufgeführt.

Verwenden Sie nach Möglichkeit einen SDK-Client erneut

Jeder SDK-Client unterhält seinen eigenen HTTP-Verbindungspool. Eine Verbindung, die bereits im Pool vorhanden ist, kann durch eine neue Anfrage wiederverwendet werden, um die Zeit für den Aufbau einer neuen Verbindung zu verkürzen. Wir empfehlen, eine einzelne Instanz des Clients gemeinsam zu nutzen, um den Mehraufwand zu vermeiden, der durch zu viele Verbindungspools entsteht, die nicht effektiv genutzt werden. Alle SDK-Clients sind threadsicher.

Wenn Sie eine Client-Instanz nicht gemeinsam nutzen möchten, rufen Sie die Instanz close() auf, um die Ressourcen freizugeben, wenn der Client nicht benötigt wird.

Schließt Eingabestreams aus Client-Vorgängen

Für Streaming-OperationenS3Client#getObject, z. B. wenn Sie ResponseInputStream direkt mit arbeiten, empfehlen wir Ihnen, wie folgt vorzugehen:

  • Lesen Sie so schnell wie möglich alle Daten aus dem Eingabestream.

  • Schließen Sie den Eingabestream so schnell wie möglich.

Wir geben diese Empfehlungen ab, weil der Eingabestream ein direkter Datenstrom aus der HTTP-Verbindung ist und die zugrunde liegende HTTP-Verbindung erst wiederverwendet werden kann, wenn alle Daten aus dem Stream gelesen und der Stream geschlossen wurde. Wenn diese Regeln nicht befolgt werden, können dem Client die Ressourcen ausgehen, indem zu viele offene, aber ungenutzte HTTP-Verbindungen zugewiesen werden.

Optimieren Sie HTTP-Konfigurationen auf der Grundlage von Leistungstests

Das SDK bietet eine Reihe von Standard-HTTP-Konfigurationen, die für allgemeine Anwendungsfälle gelten. Wir empfehlen Kunden, die HTTP-Konfigurationen für ihre Anwendungen auf der Grundlage ihrer Anwendungsfälle zu optimieren.

Als guten Ausgangspunkt bietet das SDK eine Funktion für intelligente Standardkonfigurationen. Diese Funktion ist ab Version 2.17.102 verfügbar. Sie wählen je nach Anwendungsfall einen Modus, der sinnvolle Konfigurationswerte bietet.

Verwenden Sie OpenSSL für den Netty-basierten HTTP-Client

Standardmäßig verwenden die SDKs NettyNioAsyncHttpClientdie Standard-SSL-Implementierung des JDK als. SslProvider Unsere Tests haben ergeben, dass OpenSSL besser abschneidet als die Standardimplementierung von JDK. Die Netty-Community empfiehlt außerdem die Verwendung von OpenSSL.

Um OpenSSL zu verwenden, fügen Sie Ihre Abhängigkeiten netty-tcnative hinzu. Einzelheiten zur Konfiguration finden Sie in der Netty-Projektdokumentation.

Nachdem Sie für Ihr Projekt netty-tcnative konfiguriert haben, wählt die NettyNioAsyncHttpClient Instanz automatisch OpenSSL aus. Alternativ können Sie das SslProvider explizit mithilfe des NettyNioAsyncHttpClient Builders festlegen, wie im folgenden Snippet gezeigt.

NettyNioAsyncHttpClient.builder() .sslProvider(SslProvider.OPENSSL) .build();

API-Timeouts konfigurieren

Das SDK bietet Standardwerte für einige Timeout-Optionen wie Verbindungs-Timeout und Socket-Timeouts, jedoch nicht für Timeouts bei API-Aufrufen oder Timeouts für einzelne API-Aufrufversuche. Es empfiehlt sich, Timeouts sowohl für einzelne Versuche als auch für die gesamte Anfrage festzulegen. Auf diese Weise wird sichergestellt, dass Ihre Anwendung schnell und optimal fehlschlägt, wenn vorübergehende Probleme auftreten, die dazu führen können, dass Anforderungsversuche länger dauern können, oder bei schwerwiegenden Netzwerkproblemen.

Sie können Timeouts für alle Anfragen konfigurieren, die von einem Service-Client gestellt werden, indem Sie und verwendenClientOverrideConfiguration#apiCallAttemptTimeout. ClientOverrideConfiguration#apiCallTimeout

Das folgende Beispiel zeigt die Konfiguration eines Amazon S3 S3-Clients mit benutzerdefinierten Timeout-Werten.

S3Client.builder() .overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(<custom value>)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>))) .build();
apiCallAttemptTimeout

Diese Einstellung legt die Zeitspanne für einen einzelnen HTTP-Versuch fest, nach deren Ablauf der API-Aufruf erneut versucht werden kann.

apiCallTimeout

Der Wert für diese Eigenschaft konfiguriert die Zeitspanne für die gesamte Ausführung, einschließlich aller Wiederholungsversuche.

Als Alternative zur Einstellung dieser Timeout-Werte auf dem Service-Client können Sie eine einzelne Anforderung verwenden RequestOverrideConfiguration#apiCallTimeout()und RequestOverrideConfiguration#apiCallAttemptTimeout() konfigurieren.

Im folgenden Beispiel wird eine einzelne listBuckets Anfrage mit benutzerdefinierten Timeout-Werten konfiguriert.

s3Client.listBuckets(lbr -> lbr.overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(<custom value>)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>))));

Wenn Sie diese Eigenschaften zusammen verwenden, legen Sie ein festes Limit für die Gesamtzeit fest, die für alle Versuche bei Wiederholungsversuchen aufgewendet wird. Sie legen außerdem fest, dass eine einzelne HTTP-Anfrage bei einer langsamen Anfrage schnell fehlschlägt.

Verwenden Sie Metriken

Das SDK for Java kann Metriken für die Service-Clients in Ihrer Anwendung sammeln. Sie können diese Messwerte verwenden, um Leistungsprobleme zu identifizieren, allgemeine Nutzungstrends zu überprüfen, zurückgemeldete Service-Client-Ausnahmen zu überprüfen oder um ein bestimmtes Problem genauer zu untersuchen.

Wir empfehlen Ihnen, Metriken zu sammeln und anschließend die CloudWatch Amazon-Logs zu analysieren, um ein tieferes Verständnis der Leistung Ihrer Anwendung zu erhalten.