Rumah >Java >javaTutorial >AWS SnapStart - Bahagian Mengukur sejuk dan hangat bermula dengan Java menggunakan lapisan Lambda (1)
Dalam catatan blog Cara mencipta, menerbitkan dan menggunakan lapisan untuk fungsi Java 21 Lambda kami menerbitkan lapisan Lambda pertama kami dengan Java 21. Dalam artikel ini kami akan mencipta aplikasi menggunakan lapisan Lambda ini dan kemudian mengukur permulaan sejuk dan hangat kali tanpa SnapStart didayakan, dengan SnapStart didayakan dan juga menggunakan pengoptimuman penyebuan invokasi DynamoDB. Kami juga akan membandingkan keputusan dengan ukuran kami tanpa menggunakan lapisan Lambda dan menyediakan semua kebergantungan dalam fail POM yang kami lakukan dalam artikel Mengukur sejuk dan panas bermula dengan Java 21 menggunakan tetapan memori Lambda yang berbeza.
Dalam percubaan kami, kami akan menggunakan aplikasi sampel. Pada asasnya terdapat 2 fungsi Lambda yang ditakrifkan dalam templat AWS SAM yang kedua-duanya bertindak balas kepada permintaan Gateway API dan mendapatkan produk melalui id yang diterima daripada Gateway API daripada DynamoDB. Satu fungsi Lambda GetProductByIdWithPureJava21LambdaWithCommonLayer boleh digunakan dengan dan tanpa SnapStart dan yang kedua GetProductByIdWithPureJava21LambdaAndPrimingWithCommonLayer menggunakan penyebuan permintaan SnapStart dan DynamoDB.
Pergantungan yang diberikan melalui lapisan Lambda mempunyai skop "disediakan" dalam fail pom.xml aplikasi kami.
Untuk melampirkan lapisan Lambda yang dibuat dalam artikel Cara membuat penerbitan dan menggunakan lapisan untuk fungsi Lambda Java 21 untuk fungsi Lambda dalam templat AWS SAM kita perlu menambah parameter Lapisan pada fungsi Lambda seperti ini:
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
Sila gantikan Layer ARN (termasuk versi) dengan anda sendiri yang merupakan output perintah publish layer (aws lambda publish-layer-version).
Keputusan percubaan di bawah adalah berdasarkan pembiakan lebih daripada 100 sejuk dan kira-kira 100,000 panas bermula dengan eksperimen yang berlangsung selama kira-kira 1 jam. Untuk itu (dan percubaan dari artikel saya sebelum ini) saya menggunakan alat ujian beban hey, tetapi anda boleh menggunakan apa sahaja alat yang anda mahu, seperti Serverless-artillery atau Postman.
Saya menjalankan semua eksperimen ini dengan memberikan fungsi Lambda kami 1024 MB memori dan dengan menghantar pilihan kompilasi berikut melalui pembolehubah persekitaran: JAVA_TOOL_OPTIONS: "-XX:+TieredCompilation -XX:TieredStopAtLevel=1" (penyusunan pelanggan tanpa pemprofilan) yang menyediakan sangat pertukaran yang baik antara masa mula sejuk dan panas.
Dalam jadual di bawah, saya juga akan memberikan keputusan dengan ukuran kami tanpa menggunakan lapisan Lambda yang diambil daripada artikel Mengukur sejuk dan panas bermula dengan Java 21 menggunakan tetapan memori Lambda yang berbeza untuk mempunyai perbandingan secara langsung antara kedua-duanya.
Singkatan c adalah untuk permulaan sejuk dan w adalah untuk permulaan hangat.
Masa mula sejuk (c) dan hangat (w) tanpa SnapStart dalam 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 |
Masa mula sejuk (c) dan hangat (w) dengan SnapStart tanpa Priming dalam 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 |
In diesem Artikel haben wir die Anwendung mithilfe der Lambda-Schicht mit allgemeinen 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 war mehrere Hundert Millisekunden länger als das Packen 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 erstelle, veröffentliche und verwende ich die Lambda-Ebene, die nicht nur allgemeine Abhängigkeiten (wie in diesem Artikel) enthält, sondern alle Abhängigkeiten, die zum Ausführen dieser Anwendung erforderlich sind, und vergleiche dann die Ergebnisse beider Experimente.
Atas ialah kandungan terperinci AWS SnapStart - Bahagian Mengukur sejuk dan hangat bermula dengan Java menggunakan lapisan Lambda (1). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!