Bagaimana tes kinerja fungsi AWS Lambda?

14

Biaya AWS Lambda tergantung pada waktu fungsi berjalan, dan sampai batas tertentu pada jejak memori. Memiliki fungsi yang selesai lebih cepat, dan menghabiskan lebih sedikit memori dapat menghemat banyak uang. Terutama ketika fungsi seperti itu sering dijalankan.

Bagaimana fungsi Node.js Lambda dapat disesuaikan untuk kecepatan dan jejak memori yang kecil untuk menghemat biaya?

Apakah ada aspek lain untuk Lambda yang menguntungkan untuk ditingkatkan?

Evgeny
sumber

Jawaban:

6

Tanggapan Dawny33 baik, tetapi saya akan mulai lebih awal dalam proses pengembangan.

Mengawasi lingkungan cloud Anda untuk memastikan bahwa fungsi Anda berperilaku seperti yang Anda harapkan (termasuk fungsi "produksi" Anda, yang mungkin beroperasi pada kumpulan data yang berbeda) sangat penting, karena mungkin mengungkapkan hal-hal yang tidak mungkin untuk direproduksi secara lokal atau dengan set data uji.

Meskipun demikian, saya akan mengatakan bahwa pengujian kinerja yang Anda lakukan dalam tujuan optimasi harus dimulai langsung dari mesin pengembang. Atau, setidaknya, dari beberapa lingkungan lokal sebelum mendorong ke cloud.

Alasan saya mengatakan demikian adalah bahwa meskipun AWS Lambdas luar biasa pada banyak poin, fakta bahwa Anda tidak memiliki kontrol penuh pada server akan membatasi kemampuan instrumentasi Anda. Saya tidak mengatakan instrumentasi tidak mungkin ketika di serverless, tetapi cobalah mencari tahu berapa banyak CPU yang Anda interupsi (dan berapa banyak yang disebabkan oleh kode Anda ) hanya untuk bersenang-senang;)

Jadi yang saya sarankan, dan ini sebenarnya tidak terbatas pada serverless, adalah memulai profiling lebih awal. Pembuatan profil NodeJS dapat dibuat dengan banyak alat berbeda, NewRelic, dynatrace dan AppDynamic adalah beberapa pemain besar. Ada juga pemain yang lebih kecil, beberapa di antaranya hanya paket NPM untuk diinstal (seperti Nodefly). Dimungkinkan juga untuk melakukan beberapa NodeJS tanpa alat tambahan, karena ada profiler yang terpasang pada mesin V8. Dokumentasi dari NodeJS ini akan membantu Anda memulai.

Alat apa pun yang Anda pilih, Anda ingin menginstalnya secara lokal dan mengumpulkan data profil. Itu mungkin melibatkan menjalankan agen atau termasuk paket di package.json Anda. Instruksi alat Anda akan memberi tahu Anda cara menginstalnya. Profiler yang baik akan memberi tahu Anda berapa banyak memori dan CPU yang Anda gunakan. Alat yang lebih baik akan memberi Anda wawasan tentang berapa banyak panggilan jarak jauh yang dibuat, berapa lama waktu yang dibutuhkan.

Gunakan data profil yang diberikan alat untuk mengidentifikasi hambatan dan mengatasinya. Tidak ada batasan berapa banyak profil yang dapat Anda buat. Beberapa orang (gila?) Akan melihat panggilan sistem fungsi paling kritis mereka. Anda mungkin harus melakukan hal semacam itu jika Anda ingin mencukur nanoseconds dari fungsi Anda (tapi kemudian, mungkin AWS Lambda bukan pilihan terbaik untuk memulainya).

Perlu juga dicatat pada titik ini bahwa saya belum menyebutkan sesuatu yang spesifik untuk AWS Lambda. Itu karena optimasi Anda kemungkinan besar tidak spesifik AWS Lambda (setelah semua, di serverless Anda tidak perlu khawatir tentang server / lingkungan).

Pastikan tidak hanya kode Anda yang berfungsi, tetapi juga berfungsi seperti yang Anda harapkan. Jangan terlalu mengoptimalkan, tetapi awasi terus penggunaan CPU dan memori. Haruskah array 2MB benar-benar tumbuh hingga 10MB saat Anda mengurutkannya? Mungkin tidak.

Kemudian Anda akan dapat menggunakan alat yang disebutkan oleh Dawny33, atau beberapa alat lain, untuk mengonfirmasi bahwa fungsi Anda melakukan hal yang sama ketika digunakan untuk Lambda. Namun Anda sudah memiliki tingkat kepercayaan yang sangat tinggi pada fungsi Anda dan hanya perlu memvalidasi bahwa mereka berperilaku dengan benar, tidak sepenuhnya memprofilkannya.

Alexandre
sumber
Ya, itu penting, tetapi bagaimana itu bisa dilakukan? Apakah ada beberapa alat, praktik, apa yang sebenarnya bisa dilakukan pengembang? Saya tidak melihat ada yang disebutkan dalam jawaban ini: /
Evgeny
Saya bilang begitu, melalui profil dan instrumentasi. NewRelic APM adalah contoh, tapi itu hanya salah satu profiler yang tersedia. Instal profiler, jalankan fungsi Anda, optimalkan. Apakah itu akan berjalan pada AWS Lambda tidak masalah, kecuali jika Anda memiliki masalah khusus untuk AWS. Saya akan memperbarui jawaban saya berdasarkan komentar Anda.
Alexandre
Beberapa contoh dan tautan ke artikel, blog, profiler terkenal yang dapat melakukan pekerjaan itu. Itu adalah jenis hal yang imho membuat jawaban berharga, tidak hanya mengirim orang untuk bertanya di suatu tempat "bagaimana cara menghitung cpu saya menyela, saya tidak tahu".
Evgeny
Poin yang bagus. Saya telah memperbaiki jawaban saya lagi.
Alexandre
5

Saya mungkin tidak bisa menjawabnya sepenuhnya, tetapi ini adalah pandangan saya dari pengalaman saya yang terbatas dengan lambda:

  1. Kecepatan-Kinerja: Durasi menjalankan tunggal fungsi lambda akan hadir di dasbor monitoringtab Lambda , yang terlihat seperti ini:

masukkan deskripsi gambar di sini

Begitu juga throttles / kesalahan / jumlah doa.

  1. Anda juga dapat mengatur filter CloudWatch untuk penggunaan memori fungsi lambda, yang datanya dapat digunakan untuk lebih mengoptimalkan penangan Anda. Ini adalah posting yang layak tentang cara mengaturnya.
  2. Juga, atur pencatatan yang benar , sehingga nanti Anda bisa melihat log di CloudWatch. Ini bukan peretasan optimasi, tetapi lebih merupakan praktik terbaik
  3. Pengujian : Uji fungsi lambda Anda secara menyeluruh, sehingga Anda tidak kehilangan case edge. Ini penting, karena lambda mencoba kembali fungsi yang gagal sebelum menyerah. Jadi, Anda dapat menghemat forehand tepat waktu jika Anda menguji fungsinya dengan benar. Panduan untuk menguji fungsi Lambda
Dawny33
sumber
5

Lihat profiler IOpipe untuk mendapatkan kesedihan profiler v8 penuh dari permintaan Lambda. Anda dapat memuatnya ke Chrome Devtools untuk melihat dengan tepat di mana waktu CPU dihabiskan, dan bagaimana memori digunakan untuk fungsi Anda.

masukkan deskripsi gambar di sini

Penafian: Saya bekerja untuk IOpipe

adjohn
sumber
0

Gunakan agen StackImpact untuk mendapatkan profil CPU dan memori. Lebih detail di posting blog: AWS Lambda CPU dan Memory Profiling (Node.js) . Karena proses Lambda Node.js membeku di antara permintaan, sebagian besar alat lain mungkin tidak akan berfungsi di luar kotak.

masukkan deskripsi gambar di sini

Penafian: Saya bekerja untuk StackImpact

logix
sumber
Meskipun kedengarannya terkait dan berpotensi solusi yang valid, sedikit memperluas tentang bagaimana hal itu dapat membantu menjawab pertanyaan akan menghindari perasaan tautan hanya menjawab di mana jika tautan membusuk tidak ada banyak untuk mendapatkan ide pertama tentang bagaimana itu dapat membantu.
Tensibai