Heim >Java >javaLernprogramm >AWS SnapStart – Teil Messung von Kalt- und Warmstarts mit Java mithilfe der Lambda-Schicht (1)

AWS SnapStart – Teil Messung von Kalt- und Warmstarts mit Java mithilfe der Lambda-Schicht (1)

PHPz
PHPzOriginal
2024-08-21 06:08:321019Durchsuche

AWS SnapStart - Part Measuring cold and warm starts with Java using Lambda layer (1)

Einführung

Im Blogbeitrag „So erstellen, veröffentlichen und verwenden Sie Schichten für Java 21 Lambda-Funktionen“ haben wir unsere erste Lambda-Schicht mit Java 21 veröffentlicht. In diesem Artikel erstellen wir die Anwendung mithilfe dieser Lambda-Schicht und messen dann den Kalt- und Warmstart Mal ohne aktiviertes SnapStart, mit aktiviertem SnapStart und zusätzlich angewendeter DynamoDB-Aufruf-Priming-Optimierung. Wir werden die Ergebnisse auch mit unseren Messungen vergleichen, ohne die Lambda-Schichten zu verwenden und alle Abhängigkeiten in der POM-Datei bereitzustellen, was wir im Artikel Messen von Kalt- und Warmstarts mit Java 21 unter Verwendung unterschiedlicher Lambda-Speichereinstellungen getan haben.

Die Messung von Kälte und Wärme beginnt mit Java 21 mithilfe der Lambda-Schicht

In unserem Experiment verwenden wir die Beispielanwendung. Grundsätzlich sind in der AWS SAM-Vorlage zwei Lambda-Funktionen definiert, die sowohl auf die API-Gateway-Anfragen reagieren als auch Produkte anhand der ID abrufen, die sie vom API-Gateway von DynamoDB erhalten haben. Eine Lambda-Funktion, GetProductByIdWithPureJava21LambdaWithCommonLayer, kann mit und ohne SnapStart verwendet werden, und die zweite, GetProductByIdWithPureJava21LambdaAndPrimingWithCommonLayer, verwendet SnapStart und DynamoDB-Anforderungsaufruf-Priming.

Abhängigkeiten, die über die Lambda-Ebene bereitgestellt werden, haben den in der pom.xml-Datei unserer Anwendung „bereitgestellten“ Bereich.

Um die im Artikel „So erstellen Sie eine Veröffentlichung und Verwendung von Ebenen für Java 21 Lambda-Funktionen erstellte Lambda-Ebene“ für die Lambda-Funktionen in der AWS SAM-Vorlage anzuhängen, müssen Sie der Lambda-Funktion den Parameter „Layers“ wie folgt hinzufügen:

    Type: AWS::Serverless::Function
    Properties:
      FunctionName: GetProductByIdWithPureJava21LambdaWithCommonLayer
      AutoPublishAlias: liveVersion
      Layers:
        - !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:aws-pure-java-21-common-lambda-layer:1
      Handler: software.amazonaws.example.product.handler.GetProductByIdHandler::handleRequest

Bitte ersetzen Sie den Layer-ARN (einschließlich der Version) durch Ihren eigenen, der die Ausgabe des Befehls zum Veröffentlichen des Layers ist (aws lambda Publish-Layer-Version).

Die Ergebnisse des folgenden Experiments basierten auf der Reproduktion von mehr als 100 Kalt- und etwa 100.000 Warmstarts mit einem Experiment, das etwa eine Stunde dauerte. Dafür (und Experimente aus meinem vorherigen Artikel) habe ich das Lasttest-Tool verwendet, aber Sie können jedes beliebige Tool verwenden, z. B. Serverless-Artillery oder Postman.
Ich habe alle diese Experimente durchgeführt, indem ich unseren Lambda-Funktionen 1024 MB Speicher gegeben und die folgende Kompilierungsoption über die Umgebungsvariable übergeben habe: JAVA_TOOL_OPTIONS: „-XX:+TieredCompilation -XX:TieredStopAtLevel=1“ (Client-Kompilierung ohne Profilierung), was eine sehr gute Leistung bietet Guter Kompromiss zwischen den Kalt- und Warmstartzeiten.

In den Tabellen unten werde ich auch die Ergebnisse unserer Messungen ohne Verwendung der Lambda-Schichten aus dem Artikel Messen von Kalt- und Warmstarts mit Java 21 unter Verwendung verschiedener Lambda-Speichereinstellungen bereitstellen, um einen direkten Vergleich zwischen beiden zu haben.
Die Abkürzung c steht für den Kaltstart und w für den Warmstart.

Kaltstartzeiten (c) und Warmstartzeiten (w) ohne SnapStart in ms:

Experiment c p50 c p75 c p90 c p99 c p99.9 c max w p50 w p75 w p90 w p99 w p99.9 w max
with common Lambda Layer 3497.91 3597.18 3695.58 3800.47 3908.33 4011.71 5.82 6.72 8.00 17.97 55.48 1709.13
w/o Lambda Layer 3157.6 3213.85 3270.8 3428.2 3601.12 3725.02 5.77 6.50 7.81 20.65 90.20 1423.63

Kaltstartzeiten (c) und Warmstartzeiten (w) mit SnapStart ohne Grundierung in ms:

Experiment c p50 c p75 c p90 c p99 c p99.9 c max w p50 w p75 w p90 w p99 w p99.9 w max
with common Lambda Layer 2047.12 2124.24 2439.49 2705.52 2735.43 2831.59 5.68 6.40 7.45 17.06 48.45 2139.74
w/o Lambda Layer 1626.69 1741.10 2040.99 2219.75 2319.54 2321.64 5.64 6.41 7.87 21.40 99.81 1355.09

Kalte (c) und warme (w) Startzeiten mit SnapStart und mit DynamoDB-Aufruf Priming in ms:

Experiment c p50 c p75 c p90 c p99 c p99.9 c max w p50 w p75 w p90 w p99 w p99.9 w max
with common Lambda Layer 713.88 766.38 1141.94 1181.41 1214.94 1215.32 5.59 6.30 7.39 16.39 45.09 574.61
w/o Lambda Layer 702.55 759.52 1038.50 1169.66 1179.05 1179.36 5.73 6.51 7.87 21.75 92.19 328.41

Abschluss

In diesem Artikel haben wir die Anwendung mithilfe der Lambda-Schicht mit gemeinsamen Abhängigkeiten erstellt und dann Kalt- und Warmstartzeiten ohne aktiviertes SnapStart gemessen, wobei SnapStart aktiviert war, und außerdem die DynamoDB-Aufruf-Priming-Optimierung angewendet und die Ergebnisse mit unseren Messungen ohne Verwendung von Lambda verglichen Schichten und Bereitstellung aller Abhängigkeiten in der POM-Datei, was wir im Artikel Messung von Kalt- und Warmstarts mit Java 21 unter Verwendung unterschiedlicher Lambda-Speichereinstellungen getan haben.

Ich habe mehrmals Messungen mit den üblichen Lambda-Schichten durchgeführt, um das Ergebnis meines Experiments wirklich zu bestätigen. Auch wenn ich zwischen diesen Messungen einige Abweichungen in den Ergebnissen hatte, war der Trend immer derselbe: Wenn SnapStart nicht aktiviert wurde oder aktiviert wurde, aber kein Priming des DynamoDB-Aufrufs verwendet wurde, kam es zu einem Kaltstart mit der Verwendung von Common Lambda Die Laufzeit der Schicht war mehrere Hundert Millisekunden höher als beim Paketieren aller Abhängigkeiten nur in der POM-Datei. Erst wenn SnapStart für die Lambda-Funktion aktiviert und DynamoDB-Aufrufpriming angewendet wurde, waren die Kaltstarts bei beiden Ansätzen sehr ähnlich, wahrscheinlich aufgrund der Tatsache, dass alles bereits im erstellten Snapshot enthalten war.

Die Warmstarts der Lambda-Funktion waren für beide Anwendungsfälle (mit und ohne Verwendung der Lambda-Ebenen) und für alle Experimente (mit und ohne aktiviertem SnapStart) für fast alle Perzentile recht ähnlich. Aber ich habe immer höhere Ergebnisse für den Maximalwert erzielt, wenn ich eine gemeinsame Lambda-Schicht verwende.

Im nächsten Artikel werde ich meine Experimente mit den Lambda-Schichten fortsetzen. Dieses Mal werde ich die Lambda-Ebene erstellen, veröffentlichen und verwenden, die nicht nur allgemeine Abhängigkeiten enthält (wie in diesem Artikel), sondern alle Abhängigkeiten, die zum Ausführen dieser Anwendung erforderlich sind, und dann die Ergebnisse beider Experimente vergleichen.

Das obige ist der detaillierte Inhalt vonAWS SnapStart – Teil Messung von Kalt- und Warmstarts mit Java mithilfe der Lambda-Schicht (1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn