Rumah  >  Artikel  >  Java  >  Prestasi AWS Lambda dengan lengan xvs Java- Bahagian ukuran awal

Prestasi AWS Lambda dengan lengan xvs Java- Bahagian ukuran awal

王林
王林asal
2024-07-29 17:59:39821semak imbas

AWS Lambda performance with Java  xvs arm- Part nitial measurements

pengenalan

Sehingga kini saya tidak mengukur prestasi (masa mula hangat dan sejuk) fungsi Lambda menggunakan masa jalan Java 21 untuk beberapa kes penggunaan (seperti membuat permintaan DynamoDB) untuk seni bina arm64 kerana ia tidak menyokong SnapStart. Lambda dengan masa jalan Java 21 dengan seni bina x86_64 dengan SnapStart didayakan akan mengatasi prestasi (lebih-lebih lagi dengan pengoptimuman penyebuan tambahan) Lambda dengan seni bina arm64. Tetapi pada 18 Julai 2024, AWS mengumumkan bahawa AWS Lambda kini menyokong SnapStart untuk fungsi Java yang menggunakan seni bina ARM64. Jadi sekarang masuk akal untuk saya mula mengukur masa mula yang sejuk dan hangat juga mengambil kira pilihan seni bina fungsi Lambda. Adalah diketahui bahawa dengan tetapan memori harga AWS Lambda semasa dan tempoh pelaksanaan, Lambda dengan seni bina arm64 adalah lebih kurang. 25% lebih murah daripada Lambda dengan seni bina x86_64.

Saya memutuskan untuk mencipta siri artikel berasingan untuknya dan tidak menambah topik ini pada siri AWS Lambda SnapStart saya yang semakin berkembang.

Mengukur sejuk dan hangat mula untuk aplikasi contoh

Dalam percubaan kami, kami akan menggunakan semula aplikasi yang diperkenalkan dalam artikel AWS Lambda SnapStart - Measuring Java 21 Lambda cold starts. Berikut ialah kod untuk aplikasi sampel. Pada asasnya terdapat 2 fungsi Lambda utama yang kedua-duanya bertindak balas kepada permintaan Gateway API untuk mencipta produk dengan id yang diberikan (lihat fungsi PutProductFunction Lambda) dan mendapatkan semula produk dengan id yang diberikan (lihat fungsi GetProductByIdFunction Lambda). Anda boleh menggunakan kedua-dua fungsi Lambda dengan dan tanpa SnapStart didayakan. Terdapat fungsi Lambda tambahan GetProductByIdWithPrimingFunction yang saya tulis untuk mengukur secara bebas kesan penyebuan permintaan DynamoDB untuk fungsi Lambda yang didayakan SnapStart. Anda boleh membaca lebih lanjut tentang kesan penyebuan dalam artikel saya AWS Lambda SnapStart - Mengukur penyebuan, kependaman hujung ke hujung dan masa penggunaan .

Untuk mendayakan SnapStart pada semua fungsi Lambda sila nyahkomen perkara berikut dalam templat SAM :

Globals:
  Function:
    CodeUri: target/aws-pure-lambda-snap-start-21-1.0.0-SNAPSHOT.jar
    ...
    SnapStart:
     ApplyOn: PublishedVersions  
   ...

Jika saya ingin menggunakan SnapStart hanya untuk individu, tetapi bukan semua fungsi Lambda, anda perlu menggunakan definisi SnapStart ini pada tahap fungsi Lambda dan bukannya tahap fungsi global.

Semua fungsi Lambda mempunyai tetapan berikut sebagai titik permulaan:

  • Tetapan memori 1024 MB
  • Pelanggan Apache HTTP lalai digunakan untuk bercakap dengan pangkalan data DynamoDB
  • Pilihan kompilasi Java "-XX:+TieredCompilation -XX:TieredStopAtLevel=1" yang terbukti memberikan pertukaran yang sangat baik antara masa mula yang sejuk dan hangat

Dalam templat SAM saya menambah kemungkinan untuk mentakrifkan seni bina Lambda dalam bahagian fungsi Lambda global seperti:

Globals:
  Function:
    CodeUri: target/aws-pure-lambda-snap-start-21-1.0.0-SNAPSHOT.jar
    ...
    Architectures:
      #- arm64
      - x86_64   

Cuma nyahkomen seni bina yang anda ingin gunakan untuk fungsi Lambda anda.

Walaupun Java adalah "tulis sekali, jalankan di mana-mana", saya tetap menyusun dan membina fail balang aplikasi untuk ukuran arm64 saya pada contoh t4g AWS EC2 dengan pemproses Graviton (yang berdasarkan seni bina arm64/aarch64) dengan memasang sebelum ini Amazon Corretto 21 untuk Linux aarch64. Anda boleh dapatkan balang ini di sini.

Saya juga telah mengukur semula segala-galanya untuk seni bina x86_64 sekali lagi untuk mendapatkan hasil yang setanding menggunakan versi masa jalan terkini Corretto Java 21 yang sama yang pada masa pengukuran saya ialah Java 21.v17 .

Keputusan percubaan di bawah adalah berdasarkan pembiakan lebih daripada 100 sejuk dan kira-kira 100,000 permulaan hangat. 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. Ia juga penting untuk mengetahui bahawa saya memulakan pengukuran sejurus selepas penggunaan kod sumber baharu (semula) aplikasi. Sila ambil perhatian bahawa terdapat juga Impak cache berperingkat syot kilat pada permulaan sejuk , di mana seruan pertama biasanya lebih perlahan dan seruan seterusnya menjadi lebih pantas sehingga bilangan seruan tertentu dicapai.

Sekarang mari letakkan semua ukuran untuk kes "dapatkan produk mengikut id sedia ada" (fungsi Lambda GetProductByIdFunction dan GetProductByIdWithPrimingFunction untuk SnapStart didayakan dan ukuran priming).

Masa mula sejuk (c) dan hangat (m) dalam ms:

Approach 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
x86_64, no SnapStart enabled 3554.30 3615.21 3666.15 3800.47 4108.61 4111.78 5.42 6.01 6.88 14.09 40.98 1654.59
arm64, no SnapStart enabled 3834.81 3904.42 3983.26 4047.47 4332.13 4335.74 5.96 6.66 7.69 16.01 43.68 1844.54
x86_64, SnapStart enabled without priming 1794.09 1846.86 2090.54 2204.27 2239.80 2240.08 5.37 5.96 6.93 15.88 51.64 1578.34
arm64, SnapStart enabled without priming 1845.01 1953.18 2591.70 2762.91 2793.45 2795.8 5.91 6.56 7.63 16.75 63.52 1779.14
x86_64, SnapStart enabled with DynamoDB request priming 803.18 870.18 1103.78 1258.19 1439.95 1440.67 5.55 6.25 7.45 15.50 63.52 448.85
arm64, SnapStart enabled with DynamoDB request priming 910.14 1001.79 1376.62 1623.44 1684.60 1686.19 6.05 6.72 7.81 16.66 74.68 550.59

Kesimpulan

Dalam artikel ini kami membandingkan ukuran masa mula sejuk dan hangat fungsi Lambda yang menyambung ke pangkalan data DynamoDB untuk 3 kes penggunaan:

  • tanpa SnapStart didayakan pada fungsi Lambda
  • dengan SnapStart didayakan pada fungsi Lambda tetapi tanpa pengoptimuman penyebuan
  • dengan SnapStart didayakan pada fungsi Lambda dan dengan penyebuan permintaan DynamoDB

Kami melihat bahawa dengan menggunakan seni bina x86_64 semua masa mula sejuk dan hangat adalah lebih rendah berbanding dengan seni bina arm64. Tetapi memandangkan arkitektur arm64 Harga Lambda adalah 25% lebih murah daripada seni bina x86_64 , ia memperkenalkan pertukaran prestasi kos yang sangat menarik.

Untuk ukuran kami, untuk semua 3 kes penggunaan:

  • Masa mula sejuk Lambda dengan seni bina arm64 adalah untuk kebanyakan persentil hanya 10-20% (dan hanya dalam kes yang jarang berlaku 25-27%) lebih perlahan berbanding dengan seni bina x86_64.
  • Masa mula hangat Lambda dengan seni bina arm64 adalah untuk kebanyakan persentil hanya 5-10% lebih perlahan berbanding dengan seni bina x86_64.

Jadi, pilihan seni bina arm64 agak munasabah untuk contoh aplikasi ini. Memandangkan sokongan SnapStart untuk seni bina arm64 baru sahaja diperkenalkan baru-baru ini, saya juga menjangkakan beberapa peningkatan prestasi pada masa hadapan. Sila lakukan ukuran anda sendiri untuk kes penggunaan anda!

Dalam bahagian seterusnya artikel kami akan melakukan pengukuran prestasi yang sama tetapi menetapkan memori Lambda kepada nilai yang berbeza antara 256 dan 2048 MB dan membandingkan hasilnya.

Atas ialah kandungan terperinci Prestasi AWS Lambda dengan lengan xvs Java- Bahagian ukuran awal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn