

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 die Verwendung des AWS SDK for Java 2.x
<a name="best-practices"></a>

## Vermeiden Sie hängende Anfragen, indem Sie API-Timeouts konfigurieren
<a name="bestpractice5"></a>

Das SDK bietet [Standardwerte](https://github.com/aws/aws-sdk-java-v2/blob/a0c8a0af1fa572b16b5bd78f310594d642324156/http-client-spi/src/main/java/software/amazon/awssdk/http/SdkHttpConfigurationOption.java#L134) für einige Timeout-Optionen, wie Verbindungs-Timeout und Socket-Timeout, 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 verwenden`[ClientOverrideConfiguration\$1apiCallAttemptTimeout](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.html#apiCallAttemptTimeout())`. `[ClientOverrideConfiguration\$1apiCallTimeout](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.html#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 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/RequestOverrideConfiguration.html#apiCallTimeout()](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/RequestOverrideConfiguration.html#apiCallTimeout())und verwenden, um eine einzelne Anforderung `[RequestOverrideConfiguration\$1apiCallAttemptTimeout()](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/RequestOverrideConfiguration.html#apiCallAttemptTimeout())` zu 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.

## Verbessern Sie die Leistung, indem Sie Service-Clients wiederverwenden
<a name="bestpractice1"></a>

Jeder [Service-Client](work-witih-clients.md) 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 Service-Clients sind Thread-sicher.

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.

## Vermeiden Sie Ressourcenlecks, indem Sie ungenutzte Service-Clients schließen
<a name="bestpractice-close-client"></a>

Schließen Sie einen [Service-Client](work-witih-clients.md), um Ressourcen wie Threads freizugeben, wenn sie nicht mehr benötigt werden. 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.

## Vermeiden Sie die Erschöpfung des Verbindungspools, indem Sie Eingabestreams schließen
<a name="bestpractice2"></a>

Bei Streaming-Vorgängen`[S3Client\$1getObject](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html#getObject(java.util.function.Consumer,java.nio.file.Path))`, z. B. wenn Sie `[ResponseInputStream](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/ResponseInputStream.html)` 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 die HTTP-Leistung für die Arbeitslast Ihrer Anwendung
<a name="bestpractice3"></a>

Das SDK bietet eine Reihe von [Standard-HTTP-Konfigurationen](https://github.com/aws/aws-sdk-java-v2/blob/master/http-client-spi/src/main/java/software/amazon/awssdk/http/SdkHttpConfigurationOption.java), 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](http-configuration.md#http-config-smart-defaults). Diese Funktion ist ab Version 2.17.102 verfügbar. Sie wählen je nach Anwendungsfall einen Modus, der sinnvolle Konfigurationswerte bietet. 

## Verbessern Sie die SSL-Leistung mit OpenSSL für asynchrone Clients
<a name="bestpractice4"></a>

Standardmäßig verwenden die SDKs [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.html)die 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](https://netty.io/wiki/requirements-for-4.x.html#tls-with-openssl). 

Um OpenSSL zu verwenden, fügen Sie Ihre Abhängigkeiten `netty-tcnative` hinzu. Einzelheiten zur Konfiguration finden Sie in der [Netty-Projektdokumentation](https://netty.io/wiki/forked-tomcat-native.html).

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();
```

## Überwachen Sie die Anwendungsleistung mit SDK-Metriken
<a name="bestpractice6"></a>

Das SDK for Java kann [Metriken für die Service-Clients in Ihrer Anwendung sammeln](metrics.md). 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.