Jak przetestować działanie funkcji AWS Lambda?


14

Koszt AWS Lambda zależy od czasu działania funkcji i do pewnego stopnia od zużycia pamięci. Posiadanie funkcji kończących się szybciej i zajmujących mniej pamięci może zaoszczędzić sporo pieniędzy. Zwłaszcza, gdy taka funkcja jest często wykonywana.

W jaki sposób można dostroić funkcję Lambda Node.js pod kątem szybkości i zajmowanego miejsca, aby zaoszczędzić na kosztach?

Czy istnieją inne aspekty Lambdy, które można poprawić?

Odpowiedzi:


6

Odpowiedź Dawny33 jest dobra, ale chciałbym zacząć wcześniej w procesie programowania.

Śledzenie środowiska chmury w celu upewnienia się, że funkcje zachowują się zgodnie z oczekiwaniami (w tym funkcje „produkcyjne”, które mogą działać na innym zbiorze danych), ma kluczowe znaczenie, ponieważ może ujawnić rzeczy, których nie można odtworzyć lokalnie lub za pomocą zestaw danych testowych.

Niemniej jednak powiedziałbym, że testy wydajności przeprowadzane w celu optymalizacji powinny rozpoczynać się bezpośrednio od komputera programisty. Lub przynajmniej z lokalnego środowiska przed przejściem do chmury.

Mówię tak, ponieważ chociaż AWS Lambdas są niesamowite pod wieloma względami, fakt, że nie masz pełnej kontroli nad serwerem, ograniczy twoje możliwości instrumentacyjne. Nie mówię, że to niemożliwe, gdy oprzyrządowanie w Serverless, ale spróbuj dowiedzieć się, ile masz CPU przerwań (i ile spowodowane są Twoim kodzie) tylko dla zabawy;)

Radzę więc, aby profilowanie rozpocząć wcześnie. Profilowanie NodeJS może być wykonane za pomocą wielu różnych narzędzi, NewRelic, dynatrace i AppDynamic to jedne z największych graczy. Jest też mniejszy odtwarzacz, niektóre z nich to tylko pakiet NPM do zainstalowania (jak Nodefly). Możliwe jest również wykonanie niektórych NodeJS bez dodatkowego narzędzia, ponieważ w silniku V8 jest wbudowany profiler. Ta dokumentacja od NodeJS pomoże Ci zacząć.

Niezależnie od wybranego narzędzia, chcesz je zainstalować lokalnie i gromadzić dane profilowania. Może to obejmować uruchomienie agenta lub dołączenie pakietu do pliku package.json. Instrukcje Twojego narzędzia podpowiedzą, jak je zainstalować. Dobry profiler poinformuje Cię, ile pamięci i procesora używasz. Lepsze narzędzia dadzą ci wgląd w to, ile połączeń zdalnych wykonano i ile czasu to zajęło.

Skorzystaj z danych profilowania dostarczonych przez narzędzie, aby zidentyfikować wąskie gardła i rozwiązać je. Nie ma ograniczeń co do wielkości profilowania. Niektórzy ludzie (szaleni?) Spojrzą na wywołania systemowe swoich najbardziej krytycznych funkcji. Być może będziesz musiał zrobić coś takiego, jeśli chcesz ogolić nanosekundy swojej funkcji (ale może AWS Lambda nie jest najlepszym wyborem na początek).

Warto również zauważyć w tym miejscu, że nie wspominałem nic konkretnego o AWS Lambda. To dlatego, że twoje optymalizacje najprawdopodobniej nie będą specyficzne dla AWS Lambda (w końcu w trybie bez serwera nie powinieneś martwić się o serwer / środowisko).

Upewnij się, że nie tylko Twój kod działa, ale działa tak, jak tego oczekujesz. Nie przesadnie optymalizuj, ale miej krytyczne oko na użycie procesora i pamięci. Czy tablica 2 MB naprawdę powinna wzrosnąć do 10 MB podczas sortowania? Prawdopodobnie nie.

Następnie będziesz mógł użyć narzędzi wymienionych przez Dawny33 lub innych narzędzi, aby potwierdzić, że twoje funkcje działają podobnie po wdrożeniu na Lambda. Będziesz jednak mieć bardzo wysoki poziom zaufania do swojej funkcji i będziesz musiał jedynie zweryfikować, czy zachowują się prawidłowo, a nie w pełni je profilować.


Tak, to ważne, ale jak to zrobić? Czy są jakieś narzędzia, praktyki, co dokładnie może zrobić programista? Żaden z tych elementów nie pojawia się w tej odpowiedzi: /
Evgeny,

Powiedziałem to poprzez profilowanie i oprzyrządowanie. NewRelic APM jest przykładem, ale to tylko jeden z dostępnych profilerów. Zainstaluj profiler, uruchom swoją funkcję, zoptymalizuj. To, czy będzie działać na AWS Lambda, nie ma znaczenia, chyba że masz problem specyficzny dla AWS. Zaktualizuję moją odpowiedź na podstawie twojego komentarza.
Alexandre

Kilka przykładów i linki do artykułów, blogów, znanych profilerów, którzy mogą to zrobić. Jest to coś, co imho sprawia, że ​​odpowiedź jest cenna, nie tylko wysyłając ludzi, by zadali gdzieś pytanie „jak liczyć moje przerwania procesora, nie mam pojęcia”.
Evgeny,

Słuszna uwaga. Ponownie poprawiłem swoją odpowiedź.
Alexandre,

5

Być może nie będę w stanie odpowiedzieć na nie całkowicie, ale oto moje poglądy z mojego ograniczonego doświadczenia z lambda:

  1. Wydajność prędkości: czas trwania pojedynczego uruchomienia funkcji lambda będzie obecny na desce rozdzielczej karty Lambda monitoring, która wygląda mniej więcej tak:

wprowadź opis zdjęcia tutaj

Podobnie przepustnice / błędy / liczba wywołań.

  1. Można również skonfigurować filtry CloudWatch pod kątem wykorzystania pamięci przez funkcję lambda, której danych można użyć do dalszej optymalizacji programu obsługi. To jest porządny post na temat tego, jak go skonfigurować.
  2. Ponadto skonfiguruj odpowiednie rejestrowanie , aby móc później przeglądać dzienniki w CloudWatch. To nie jest hack optymalizacji jako taki, ale najlepsza praktyka
  3. Testowanie : dokładnie przetestuj swoje funkcje lambda, aby nie przegapić przypadkowych przypadków. Jest to ważne, ponieważ lambda ponawia próbę niepowodzenia funkcji przed poddaniem się. Możesz więc zaoszczędzić na czasie, jeśli odpowiednio przetestowałeś tę funkcję. Przewodnik po testowaniu funkcji Lambda

5

Sprawdź profiler IOpipe, aby uzyskać pełne zrzuty profilera v8 z wywołań Lambda. Możesz załadować je do Chrome Devtools, aby zobaczyć dokładnie, gdzie spędzany jest czas procesora i jak pamięć jest wykorzystywana do twoich funkcji.

wprowadź opis zdjęcia tutaj

Uwaga: Pracuję dla IOpipe


0

Użyj agenta StackImpact, aby uzyskać profile procesora i pamięci. Więcej szczegółów w blogu: AWS Lambda CPU and Memory Profiling (Node.js) . Ponieważ proces Lambda Node.js zawiesza się między żądaniami, większość innych narzędzi prawdopodobnie nie będzie działać od razu po wyjęciu z pudełka.

wprowadź opis zdjęcia tutaj

Uwaga: Pracuję dla StackImpact


Choć brzmi to jak pokrewne i potencjalnie prawidłowe rozwiązanie, nieco szersze wyjaśnienie, w jaki sposób może pomóc w rozwiązaniu tego pytania, pozwoliłoby uniknąć poczucia, że ​​link jest odpowiedzią tylko na to, że jeśli zgnilizna linku nie ma zbyt wiele, aby dowiedzieć się, jak to może pomóc.
Tensibai,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.