Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Best practice per AWS SDK for Java 2.x
Questa sezione elenca le best practice per l'utilizzo dell'SDK for Java 2.x.
Argomenti
Riutilizza un client SDK, se possibile
Ogni client SDK mantiene il proprio pool di connessioni HTTP. Una connessione già esistente nel pool può essere riutilizzata con una nuova richiesta per ridurre il tempo necessario per stabilire una nuova connessione. Ti consigliamo di condividere una singola istanza del client per evitare il sovraccarico dovuto alla presenza di troppi pool di connessioni che non vengono utilizzati in modo efficace. Tutti i client SDK sono thread-safe.
Se non desideri condividere un'istanza client, richiedi close()
all'istanza di rilasciare le risorse quando il client non è necessario.
Chiudi i flussi di input dalle operazioni del client
Per operazioni di streamingS3Client#getObject
, ad esempio se lavori ResponseInputStream
direttamente con, ti consigliamo di fare quanto segue:
-
Leggi tutti i dati del flusso di input il prima possibile.
-
Chiudi il flusso di input il prima possibile.
Forniamo questi consigli perché il flusso di input è un flusso diretto di dati proveniente dalla connessione HTTP e la connessione HTTP sottostante non può essere riutilizzata finché tutti i dati dello stream non sono stati letti e lo stream non viene chiuso. Se queste regole non vengono seguite, il client può esaurire le risorse allocando troppe connessioni HTTP aperte ma inutilizzate.
Ottimizza le configurazioni HTTP in base ai test delle prestazioni
L'SDK fornisce un set di configurazioni http predefinite
Come buon punto di partenza, l'SDK offre una funzionalità di configurazione predefinita intelligente. Questa funzionalità è disponibile a partire dalla versione 2.17.102. È possibile scegliere una modalità in base al caso d'uso, che fornisce valori di configurazione ragionevoli.
Usa OpenSSL per il client HTTP basato su Netty
Per impostazione predefinita, l'SDK NettyNioAsyncHttpClient
SslProvider
I nostri test hanno rilevato che OpenSSL offre prestazioni migliori rispetto all'implementazione predefinita di JDK. La community di Netty consiglia inoltre di utilizzare OpenSSL
Per usare OpenSSL, netty-tcnative
aggiungilo alle tue dipendenze. Per i dettagli di configurazione, consulta la documentazione del progetto Netty
Dopo aver netty-tcnative
configurato il progetto, l'NettyNioAsyncHttpClient
istanza selezionerà automaticamente OpenSSL. In alternativa, puoi impostarlo in SslProvider
modo esplicito utilizzando il NettyNioAsyncHttpClient
builder, come mostrato nel seguente frammento.
NettyNioAsyncHttpClient.builder() .sslProvider(SslProvider.OPENSSL) .build();
Configura i timeout delle API
L'SDK fornisce valori predefiniti
È possibile configurare i timeout per tutte le richieste effettuate dai client di un servizio utilizzando and. ClientOverrideConfiguration#apiCallAttemptTimeout
ClientOverrideConfiguration#apiCallTimeout
L'esempio seguente mostra la configurazione di un client Amazon S3 con valori di timeout personalizzati.
S3Client.builder() .overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(
<custom value>
)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>
))) .build();
apiCallAttemptTimeout
-
Questa impostazione imposta la quantità di tempo per un singolo tentativo HTTP, dopodiché la chiamata API può essere ritentata.
apiCallTimeout
-
Il valore di questa proprietà configura la quantità di tempo per l'intera esecuzione, inclusi tutti i tentativi di nuovo tentativo.
In alternativa all'impostazione di questi valori di timeout sul client del servizio, è possibile utilizzare RequestOverrideConfiguration#apiCallTimeout()
RequestOverrideConfiguration#apiCallAttemptTimeout()
configurare una singola richiesta.
L'esempio seguente configura una singola listBuckets
richiesta con valori di timeout personalizzati.
s3Client.listBuckets(lbr -> lbr.overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(
<custom value>
)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>
))));
Quando si utilizzano queste proprietà insieme, si imposta un limite rigido al tempo totale impiegato per tutti i tentativi tra più tentativi. È inoltre possibile impostare una richiesta HTTP individuale in modo che abbia esito negativo rapidamente in caso di richiesta lenta.
Usa le metriche
L'SDK for Java può raccogliere metriche per i client di servizio dell'applicazione. Puoi utilizzare queste metriche per identificare problemi di prestazioni, esaminare le tendenze complessive di utilizzo, esaminare le eccezioni restituite dai client di servizio o per approfondire un problema particolare.
Ti consigliamo di raccogliere parametri, quindi analizzare Amazon CloudWatch Logs, per ottenere una comprensione più approfondita delle prestazioni della tua applicazione.