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.
Prepare a los clientes de SDK en AWS SDK for Java 2.x
Utilice la SdkWarmUp utilidad para preparar AWS SDK for Java 2.x a sus clientes de SDK durante la inicialización de la aplicación. Esto reduce la latencia de la primera solicitud que gestiona la aplicación tras el inicio o la restauración.
Una fase de preparación ejercita la ruta de solicitud del SDK (crear un cliente e invocar una operación) antes de que la aplicación gestione el tráfico real. Se usa con funciones de control y restauración, como Lambda. SnapStart Estas funciones toman una instantánea de la aplicación inicializada y, a continuación, la restauran a partir de esa instantánea para reducir la latencia de arranque en frío.
Sin ellasSdkWarmUp, debe escribir su propio código de calentamiento antes de cada punto de control, lo que resulta engorroso. ConSdkWarmUp, realizas una sola llamada para convencer a todos tus clientes. Puedes agrupar todos los clientes de SDK de tu ruta de clases o solo los clientes específicos que usa tu aplicación.
En este tema, aprenderás a configurar y usar SdkWarmUp con y. CRaC AWS Lambda SnapStart Para obtener más información acerca de otras técnicas que reducen el tiempo de inicio en Lambda, consulteReduzca el tiempo de inicio del SDK para AWS Lambda.
La SdkWarmUp API
SdkWarmUpforma parte del sdk-core módulo, por lo que está disponible para todos los clientes de servicio sin ninguna dependencia adicional. Configure su proyecto para que utilice la versión 2.54.0 o una posterior del. AWS SDK for Java 2.x A continuación, llame a uno de los dos métodos estáticos que se describen en las siguientes secciones. Al llamar a cualquiera de los métodos, SdkWarmUp realiza una llamada de red para calentar el cliente HTTP. Para calentar el cliente de servicio, utiliza una respuesta local preestablecida. No necesita AWS
credenciales ni permisos de IAM y no genera cargos. AWS
Calienta todos los clientes de SDK de la ruta de clases
El warmUp() método descubre todos los clientes del servicio SDK de la ruta de clases y los clasifica junto con los clientes HTTP que utilizan. Utilice este método cuando dependa de un número reducido de módulos de servicio y llame a la mayoría de los clientes que proporcionan. El siguiente ejemplo de Java código llama warmUp() sin argumentos:
import software.amazon.awssdk.core.warmup.SdkWarmUp; SdkWarmUp.warmUp();
Este método se ejecuta como máximo una vez por JVM. Tras una llamada exitosa, las llamadas subsiguientes vuelven inmediatamente.
Prepare clientes de SDK específicos
El warmUp(Class<? extends SdkClient>... clients) método solo clasifica a los clientes a los que nombras. Pase una clase de cliente sincrónico para calentar la ruta sincrónica o una clase de cliente asíncrono para calentar la ruta asíncrona.
Utilice este método cuando su ruta de clases contenga más clientes de servicio de los que llama su aplicación. Por ejemplo, esto ocurre cuando una dependencia incorpora módulos de servicio que no utilizas. Nombrar solo los clientes que necesitas hace que el tiempo de calentamiento sea proporcional al uso real de tu aplicación, en lugar de a tu ruta de clases completa. El siguiente ejemplo Java de código solo describe las clases y: S3Client DynamoDbClient
import software.amazon.awssdk.core.warmup.SdkWarmUp; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; SdkWarmUp.warmUp(S3Client.class, DynamoDbClient.class);
Úselo SdkWarmUp con Lambda SnapStart
AWS Lambda SnapStartmejora el rendimiento de inicio de las Java funciones. Al publicar una nueva versión de una función, Lambda la SnapStart inicializa y toma una instantánea del estado de la memoria y del disco. A continuación, almacena en caché la instantánea para volver a utilizarla. Para obtener información sobre los tiempos de ejecución compatibles y sobre cómo activarlos SnapStart para su función, consulte la Guía para AWS Lambda desarrolladores.
Dado que Lambda toma la instantánea después de ejecutarse el constructor de su controlador, llame al SdkWarmUp.warmUp() constructor. A continuación, la instantánea incluye los clientes preconfigurados, y cada invocación que se restaure a partir de la instantánea se beneficia del calentamiento. El siguiente ejemplo Java de código invoca un constructor SdkWarmUp.warmUp() de controladores de Lambda:
import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.awssdk.core.warmup.SdkWarmUp; public class MyHandler implements RequestHandler<String, String> { public MyHandler() { SdkWarmUp.warmUp(); // Your other initialization here. } @Override public String handleRequest(String input, Context context) { // Your handler logic here. } }
Si tu función necesita ejecutar código personalizado antes de que Lambda tome la instantánea o después de restaurarla, implementa SnapStart ganchos en tiempo de ejecución. Para obtener más información, consulte los ganchos SnapStart de tiempo de ejecución para Java en la Guía para AWS Lambda desarrolladores.
SdkWarmUp Utilízalo con un CRAC independiente
También puedes usarlo SdkWarmUp CRaC directamente, en una aplicación que gestione sus propios puntos de control. En esta sección se muestra a qué lugar pertenece la llamada de preparación en una aplicación para la que ya está configurada. CRaC Para configurar una aplicaciónCRaC, consulte la opción Compatibilidad con org.crac:crac dependencia que requieren las interfaces del ciclo de vida.
Prepárate antes del punto de control
Llama SdkWarmUp.warmUp() durante la inicialización, antes de pasar al punto de control. Tu aplicación ya se registra como CRAC Resource para cerrar y volver a abrir las conexiones en el punto de control. Añade la llamada de preparación al mismo constructor, como se muestra en el siguiente ejemplo de código: Java
import org.crac.Context; import org.crac.Core; import org.crac.Resource; import software.amazon.awssdk.core.warmup.SdkWarmUp; public class MyApp implements Resource { public MyApp() { SdkWarmUp.warmUp(); // Your other initialization here. Core.getGlobalContext().register(this); } @Override public void beforeCheckpoint(Context<? extends Resource> context) throws Exception { // Close your service clients here. } @Override public void afterRestore(Context<? extends Resource> context) throws Exception { // Create your service clients again here. } }
nota
CRac no toma ningún punto de control mientras ningún descriptor de archivo esté abierto. Si utilizas el cliente AWS CRT-based HTTP, cerrar tus clientes de servicio por sí solo no es suficiente, ya que el cliente mantiene abierto un bucle de eventos compartido. Libéralo beforeCheckpoint como se muestra en el siguiente ejemplo de código Java:
import org.crac.Context; import org.crac.Resource; import software.amazon.awssdk.crt.CrtResource; import software.amazon.awssdk.crt.io.EventLoopGroup; @Override public void beforeCheckpoint(Context<? extends Resource> context) { EventLoopGroup.closeStaticDefault(); CrtResource.waitForNoResources(); }
Los clientes HTTP Netty Apache basados y basados liberan sus recursos cuando se cierra el cliente de servicio, por lo que no es necesario desmontarlos más.
Tome el punto de control como lo haría normalmente.
Recursos adicionales
Los siguientes recursos proporcionan más información sobre los temas tratados en esta sección:
-
Documentación de CRac sobre
GitHub