Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Prácticas recomendadas para AWS SDK for Java 2.x
En esta sección, se describen las prácticas recomendadas para utilizar el SDK para Java 2.x.
Temas
Reutilizar un cliente del SDK, si es posible
Cada cliente del SDK mantiene su propio grupo de conexiones HTTP. Una conexión que ya existe en el grupo se puede reutilizar mediante una nueva solicitud para reducir el tiempo necesario para establecer una nueva conexión. Recomendamos compartir una sola instancia del cliente para evitar la sobrecarga que supone tener demasiados grupos de conexiones que no se utilizan de forma eficaz. Todos los clientes del SDK son seguros para subprocesos.
Si no quiere compartir una instancia de cliente, utilice close()
en la instancia para liberar los recursos cuando el cliente no sea necesario.
Cerrar las secuencias de entrada de las operaciones del cliente
Para operaciones de secuencia, como S3Client#getObject
, si trabaja directamente con ResponseInputStream
, recomendamos que haga lo siguiente:
-
Lea todos los datos de la secuencia de entrada lo antes posible.
-
Cierre la secuencia de entrada cuanto antes.
Hacemos estas recomendaciones porque la secuencia de entrada es un flujo directo de datos de la conexión HTTP y la conexión HTTP subyacente no se puede reutilizar hasta que se hayan leído todos los datos de la secuencia y esta se cierre. Si no se siguen estas reglas, el cliente puede quedarse sin recursos por asignar demasiadas conexiones HTTP abiertas pero no utilizadas.
Ajustar las configuraciones HTTP en función de las pruebas de rendimiento
El SDK proporciona un conjunto de configuraciones http predeterminadas
Como buen punto de partida, el SDK ofrece una característica de configuración inteligente de valores predeterminados. Esta característica está disponible a partir de la versión 2.17.102. Debe seleccionar un modo según su uso, lo que proporciona valores de configuración razonables.
Utilizar OpenSSL para el cliente HTTP basado en Netty
De forma predeterminada, el NettyNioAsyncHttpClient
SslProvider
. Nuestras pruebas revelaron que OpenSSL funciona mejor que la implementación predeterminada de JDK. La comunidad de Netty también recomienda usar OpenSSL
Para usar OpenSSL, agregue netty-tcnative
a sus dependencias. Para obtener detalles de configuración, consulte la documentación del proyecto Netty
Una vez que haya configurado su proyecto con netty-tcnative
, la instancia del NettyNioAsyncHttpClient
seleccionará OpenSSL automáticamente. Como alternativa, puede configurar el SslProvider
de forma explícita mediante el compilador de NettyNioAsyncHttpClient
, como muestra el siguiente fragmento.
NettyNioAsyncHttpClient.builder() .sslProvider(SslProvider.OPENSSL) .build();
Configurar los tiempos de espera de la API
El SDK proporciona valores predeterminados
Puede configurar los tiempos de espera para todas las solicitudes realizadas por los clientes de un servicio mediante ClientOverrideConfiguration#apiCallAttemptTimeout
y ClientOverrideConfiguration#apiCallTimeout
.
En el siguiente ejemplo, se muestra la configuración de un cliente Amazon S3 con valores de tiempo de espera personalizados.
S3Client.builder() .overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(
<custom value>
)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>
))) .build();
apiCallAttemptTimeout
-
Esta configuración establece la cantidad de tiempo para un único intento HTTP, tras el cual se puede volver a intentar la llamada a la API.
apiCallTimeout
-
El valor de esta propiedad configura la cantidad de tiempo de toda la ejecución, incluidos todos los reintentos.
Como alternativa a establecer estos valores de tiempo de espera en el cliente de servicio, puede usar RequestOverrideConfiguration#apiCallTimeout()
RequestOverrideConfiguration#apiCallAttemptTimeout()
para configurar una sola solicitud.
El ejemplo siguiente configura una única solicitud de listBuckets
con valores de tiempo de espera personalizados.
s3Client.listBuckets(lbr -> lbr.overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(
<custom value>
)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>
))));
Al utilizar juntas estas propiedades, establece un límite estricto en el tiempo total dedicado a todos los intentos entre reintentos. También configura una solicitud HTTP individual para poder responder rápido a los errores en las solicitudes lentas.
Utilizar métricas
El SDK para Java puede recopilar métricas para los clientes de servicio de su aplicación. Puede utilizar estas métricas para identificar problemas de rendimiento, revisar las tendencias generales de uso, revisar las excepciones de clientes de servicio devueltas o profundizar para comprender un problema concreto.
Le recomendamos que recopile métricas y, a continuación, analice los registros de Amazon CloudWatch para conocer mejor el rendimiento de su aplicación.