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.
Saya mungkin tidak bisa menjawabnya sepenuhnya, tetapi ini adalah pandangan saya dari pengalaman saya yang terbatas dengan lambda:
monitoring
tab Lambda , yang terlihat seperti ini:Begitu juga throttles / kesalahan / jumlah doa.
sumber
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.
Penafian: Saya bekerja untuk IOpipe
sumber
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.
Penafian: Saya bekerja untuk StackImpact
sumber