View a markdown version of this page

Wärmen Sie die SDK-Clients in der 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.

Wärmen Sie die SDK-Clients in der AWS SDK for Java 2.x

Verwenden Sie das SdkWarmUp Hilfsprogramm in AWS SDK for Java 2.x , um Ihre SDK-Clients während der Anwendungsinitialisierung aufzuwärmen. Dies reduziert die Latenz der ersten Anfrage, die Ihre Anwendung nach dem Start oder der Wiederherstellung verarbeitet.

Bei einem Warm-up wird der SDK-Anforderungspfad (Erstellen eines Clients und Aufrufen einer Operation) getestet, bevor Ihre Anwendung den tatsächlichen Datenverkehr verarbeitet. Sie verwenden es mit Checkpoint- und Restore-Funktionen wie Lambda. SnapStart Diese Funktionen erstellen einen Snapshot Ihrer initialisierten Anwendung und stellen ihn dann anhand dieses Snapshots wieder her, um die Kaltstartlatenz zu reduzieren.

SdkWarmUpAndernfalls müssen Sie vor jedem Checkpoint Ihren eigenen Aufwärmcode schreiben, was umständlich ist. Mit tätigen Sie einen einzigen AnrufSdkWarmUp, um alle Ihre Kunden zu begeistern. Sie können alle SDK-Clients in Ihrem Classpath warmlaufen lassen oder nur die spezifischen Clients, die Ihre Anwendung verwendet.

In diesem Thema erfahren Sie, wie Sie mit und konfigurieren und verwendenSdkWarmUp. CRaC AWS Lambda SnapStart Weitere Informationen zu anderen Techniken, die die Startzeit auf Lambda reduzieren, finden Sie unterReduzieren Sie die SDK-Startzeit für AWS Lambda.

Die SdkWarmUp API

SdkWarmUpist Teil des sdk-core Moduls und steht daher jedem Servicekunden ohne zusätzliche Abhängigkeit zur Verfügung. Konfigurieren Sie Ihr Projekt so, dass es Version 2.54.0 oder höher von verwendet. AWS SDK for Java 2.x Rufen Sie dann eine der beiden statischen Methoden auf, die in den folgenden Abschnitten beschrieben werden. Führt beim Aufrufen einer der Methoden einen SdkWarmUp Netzwerkaufruf durch, um den HTTP-Client warm zu halten. Um den Service-Client aufzuwärmen, verwendet er eine lokale, vorgefertigte Antwort. Es benötigt keine AWS Anmeldeinformationen oder IAM-Berechtigungen und es fallen AWS keine Gebühren an.

Wärmen Sie alle SDK-Clients im Klassenpfad auf

Die warmUp() Methode erkennt jeden SDK-Dienstclient im Klassenpfad und wärmt jeden Client zusammen mit den von ihnen verwendeten HTTP-Clients auf. Verwenden Sie diese Methode, wenn Sie auf eine kleine Anzahl von Dienstmodulen angewiesen sind und die meisten von ihnen bereitgestellten Clients aufrufen. Das folgende Java Codebeispiel ruft warmUp() ohne Argumente auf:

import software.amazon.awssdk.core.warmup.SdkWarmUp; SdkWarmUp.warmUp();

Diese Methode wird höchstens einmal pro JVM ausgeführt. Nach einem erfolgreichen Aufruf kehren nachfolgende Aufrufe sofort zurück.

Wärmen Sie bestimmte SDK-Clients auf

Die warmUp(Class<? extends SdkClient>... clients) Methode wärmt nur die Clients auf, die Sie benennen. Übergeben Sie eine synchrone Clientklasse, um den synchronen Pfad aufzuwärmen, oder eine asynchrone Clientklasse, um den asynchronen Pfad aufzuwärmen.

Verwenden Sie diese Methode, wenn Ihr Klassenpfad mehr Service-Clients enthält, als Ihre Anwendung aufruft. Dies passiert beispielsweise, wenn eine Abhängigkeit Dienstmodule enthält, die Sie nicht verwenden. Wenn Sie nur die Clients benennen, die Sie benötigen, bleibt die Aufwärmzeit proportional zur tatsächlichen Nutzung Ihrer Anwendung und nicht zu Ihrem vollständigen Klassenpfad. Das folgende Java Codebeispiel wärmt nur die Klassen und: 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);

Mit Lambda verwenden SdkWarmUp SnapStart

AWS Lambda SnapStartverbessert die Startleistung für Java Funktionen. Wenn Sie eine neue Version einer Funktion veröffentlichen, SnapStart initialisiert Lambda sie und erstellt einen Snapshot des Speicher- und Festplattenzustands. Anschließend wird der Snapshot zur Wiederverwendung zwischengespeichert. Informationen zu unterstützten Laufzeiten und zur Aktivierung SnapStart für Ihre Funktion finden Sie im AWS Lambda Entwicklerhandbuch.

Da Lambda den Snapshot erstellt, nachdem der Konstruktor Ihres Handlers ausgeführt wurde, rufen Sie den Konstruktor SdkWarmUp.warmUp() auf. Der Snapshot enthält dann Ihre aufgewärmten Clients, und jeder Aufruf, der aus dem Snapshot wiederhergestellt wird, profitiert vom Warm-Up. Das folgende Java Codebeispiel ruft einen SdkWarmUp.warmUp() Lambda-Handler-Konstruktor auf:

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. } }

Wenn Ihre Funktion benutzerdefinierten Code ausführen muss, bevor Lambda den Snapshot erstellt oder nachdem er wiederhergestellt wurde, implementieren SnapStart Sie Runtime-Hooks. Weitere Informationen finden Sie unter SnapStart Runtime-Hooks für Java im AWS Lambda Entwicklerhandbuch.

SdkWarmUp Mit eigenständigem cRAC verwenden

Sie können with auch CRaC direkt in einer Anwendung verwendenSdkWarmUp, die ihre eigenen Checkpoints verwaltet. Dieser Abschnitt zeigt, wo der Aufwärmanruf in einer Anwendung hingehört, für die bereits konfiguriert ist. CRaC Informationen zur Konfiguration einer Anwendung für finden Sie CRaC unter Step-by-step CrAC-Support unter. GitHub Diese exemplarische Vorgehensweise behandelt die unterstützten JDK-Distributionen, die Plattformvoraussetzungen und die org.crac:crac Abhängigkeit, die die Lifecycle-Schnittstellen erfordern.

Wärmen Sie sich vor dem Checkpoint auf

Rufen Sie SdkWarmUp.warmUp() während der Initialisierung an, bevor Sie den Checkpoint betreten. Ihre Anwendung registriert sich bereits als CRAC, um Verbindungen rund Resource um den Checkpoint zu schließen und wieder zu öffnen. Fügen Sie den Aufwärmaufruf demselben Konstruktor hinzu, wie im folgenden Codebeispiel gezeigt: 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. } }
Anmerkung

cRAC nimmt keinen Checkpoint entgegen, solange ein Dateideskriptor geöffnet ist. Wenn Sie den AWS CRT-based HTTP-Client verwenden, reicht es nicht aus, Ihre Service-Clients allein zu schließen, da der Client eine gemeinsame Ereignisschleife offen hält. Geben Sie es frei, beforeCheckpoint wie im folgenden Java-Codebeispiel gezeigt:

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

Die Netty basierten und Apache basierten HTTP-Clients geben ihre Ressourcen frei, wenn Sie den Service-Client schließen, sodass kein zusätzlicher Teardown erforderlich ist.

Nehmen Sie den Checkpoint wie gewohnt ein.

Weitere Ressourcen

Die folgenden Ressourcen enthalten weitere Informationen zu den in diesem Abschnitt behandelten Themen: