AWS Lambda fonksiyonlarını nasıl test edebilirim?


14

AWS Lambda maliyeti, bir işlevin çalıştığı zamana ve bir dereceye kadar bellek ayak izine bağlıdır. Daha hızlı biten ve daha az bellek alan işlevlere sahip olmak oldukça fazla para tasarrufu sağlayabilir. Özellikle böyle bir işlev sık sık yürütüldüğünde.

Maliyetten tasarruf etmek için Node.js Lambda işlevi hız ve küçük bellek ayak izi için nasıl ayarlanabilir?

Lambda'nın iyileştirilmesi avantajlı başka yönleri var mı?

Yanıtlar:


6

Dawny33 yanıtı iyi, ama geliştirme sürecinin başlarında başlardım .

Yerel olarak veya bir test veri kümesi.

Bununla birlikte, bir optimizasyon amacıyla yaptığınız bu performans testinin doğrudan geliştiricinin makinesinden başlaması gerektiğini söyleyebilirim. Ya da en azından, buluta geçmeden önce bazı yerel ortamlardan.

Bunu söylememin nedeni, AWS Lambdas birçok noktada şaşırtıcı olsa da, sunucu üzerinde tam bir kontrole sahip olmamanızın enstrümantasyon yeteneklerinizi sınırlayacağıdır. Ben ne zaman Sunucusuz enstrümantasyon imkansız olduğunu söyleyerek bununla birlikte ne kadar (ve kaç kaynaklanır kaç CPU kesmeler endam deneyin değilim senin kod) sadece eğlence için;)

Öyleyse tavsiye ettiğim ve bu aslında sunucusuz ile sınırlı değil, profil oluşturmaya erken başlamaktır. NodeJS profili birçok farklı araçla yapılabilir, NewRelic, dynatrace ve AppDynamic büyük oyunculardan bazılarıdır. Daha küçük bir oyuncu da var, bazıları sadece bir NPM paketi (Nodefly gibi). V8 motorunda bir profil oluşturduğu için, herhangi bir ek alet kullanmadan bazı NodeJS yapmak da mümkündür. NodeJS'nin bu belgeleri başlamanıza yardımcı olacaktır.

Hangi aracı seçerseniz seçin, yerel olarak yüklemek ve profil oluşturma verileri toplamak istersiniz. Bu, bir aracı çalıştırmayı veya paketinize bir paket eklemeyi içerebilir. Aracınızın talimatları size nasıl kurulacağını söyleyecektir. İyi bir profil oluşturucu, ne kadar bellek ve CPU kullandığınızı size bildirir. Daha iyi araçlar, kaç uzak aramanın yapıldığı, ne kadar sürdüğü hakkında size fikir verecektir.

Darboğazları tanımlamak ve bunlara hitap etmek için aracın sağladığı profil oluşturma verilerini kullanın. Ne kadar profil oluşturabileceğiniz konusunda bir sınırlama yoktur. Bazı insanlar (deli?) En kritik işlevlerinin sistem çağrılarına bakacaktır. İşlevinizin nanosaniyesini tıraş etmek istiyorsanız bu tür bir şey yapmanız gerekebilir (ancak, belki de AWS Lambda ile başlamak için en iyi seçim değildir).

Bu noktada, AWS Lambda'ya özgü bir şeyden bahsetmediğimi de belirtmek gerekir. Bunun nedeni, optimizasyonlarınızın büyük olasılıkla AWS Lambda'ya özgü olmayacağıdır (sonuçta, sunucusuz olarak sunucu / ortam hakkında endişelenmemelisiniz).

Yalnızca kodunuzun değil, aynı zamanda beklediğiniz şekilde çalıştığından emin olun. Aşırı optimizasyon yapmayın, ancak CPU ve bellek kullanımına dikkat edin. Sıraladığınızda 2MB'lık bir dizi gerçekten 10MB'a mı çıkmalı? Muhtemelen değil.

Daha sonra, Lambda'ya konuşlandırıldığında işlevlerinizin benzer şekilde çalıştığını doğrulamak için Dawny33 tarafından belirtilen araçları veya diğer bazı araçları kullanabilirsiniz. Bununla birlikte, zaten işlevinize çok yüksek bir güven seviyeniz olacak ve tam olarak profilleme yapmak yerine sadece düzgün davrandıklarını doğrulamanız gerekecek.


Evet, önemli, ama nasıl yapılabilir? Bazı araçlar, uygulamalar var, bir geliştirici tam olarak ne yapabilir? Bu cevapta bunlardan hiçbirini görmüyorum: /
Evgeny

Bunu profilleme ve enstrümantasyonla söyledim. NewRelic APM bir örnektir, ancak bu mevcut profillerden sadece biridir. Profil oluşturucuyu yükleyin, işlevinizi çalıştırın, optimize edin. AWS'ye özgü bir sorununuz olmadığı sürece AWS Lambda üzerinde çalışıp çalışmayacağı önemli değildir. Cevabınızı yorumunuza göre güncelleyeceğim.
Alexandre

Bazı örnekler ve iş, makale, blog, bilinen profiler bağlantıları. Bu, imho'nun cevabı değerli kılan şeydir, sadece insanları bir yere "cpu kesintilerini nasıl sayabilirim, hiçbir fikrim yok" diye bir soru sormak için göndermez.
Evgeny

İyi bir nokta. Cevabımı tekrar geliştirdim.
Alexandre

5

Tamamen cevaplayamayabilirim, ama burada lambda ile olan sınırlı deneyimimden görüşlerim:

  1. Hız Performansı: Lambda işlevinin tek bir çalışmasının süresi, Lambda monitoringsekmesinin panosunda şu şekilde görünecektir:

resim açıklamasını buraya girin

Gazlar / hatalar / çağrı sayısı da öyle.

  1. Ayrıca , verileri işleyicinizi daha da optimize etmek için kullanılabilen bir lambda işlevinin bellek kullanımı için CloudWatch filtreleri de ayarlanabilir . Bu nasıl kuracağınızla ilgili iyi bir yazı.
  2. Ayrıca, daha sonra CloudWatch'ta günlüklerden geçebilmeniz için uygun günlük kaydını ayarlayın. Bu kendi başına bir optimizasyon kesmek değil, daha iyi bir uygulama
  3. Test : Lamda fonksiyonlarınızı iyice test edin, böylece kenar durumlarını kaçırmayın. Bu önemlidir, çünkü lambda vazgeçmeden önce başarısız fonksiyonları yeniden dener. Böylece, işlevi düzgün bir şekilde test ettiyseniz, önceden zamandan tasarruf edebilirsiniz. Lambda fonksiyonlarını test etme kılavuzu

5

Lambda invokasyonlarından tam v8 profil dökümü almak için IOpipe profiline göz atın . İşlemcinin tam olarak nerede harcandığını ve belleğin işlevleriniz için nasıl kullanıldığını görmek için bunları Chrome Devtools'a yükleyebilirsiniz.

resim açıklamasını buraya girin

Yasal Uyarı: IOpipe için çalışıyorum


0

CPU ve bellek profillerini almak için StackImpact aracısını kullanın . Blog gönderisinde daha fazla ayrıntı: AWS Lambda CPU ve Memory Profiling (Node.js) . Lambda Node.js işlemi istekler arasında donuyor olduğundan, diğer araçların çoğu muhtemelen kutudan çıkmaz.

resim açıklamasını buraya girin

Yasal Uyarı: StackImpact için çalışıyorum


İlgili ve potansiyel olarak geçerli bir çözüm gibi görünse de, sorunun ele alınmasına nasıl yardımcı olabileceğine dair biraz uzatma, bir bağlantının sadece bağlantı çürümesi durumunda, nasıl yardımcı olabileceğine dair ilk fikir edinmek için fazla bir şey olmadığı cevap hissini önleyecektir.
Tensibai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.