6

Zaimplementowałem funkcję Lambda AWS przy użyciu Serverless Framework. Ta funkcja Lambda używa RDS i MongoDB. Punkt końcowy MongoDB działa około 500ms, ale RDS działa przez 12 sekund (zimny start) i ~ 3 sekundy (gorący start).AWS Lamba ze słabą wydajnością podczas używania RDS

Uwaga: używam Sequelize w tym punkcie końcowym.

Jak przyspieszyć punkt końcowy RDS Lambda?

Odpowiedz

8

W pierwszym wierszu po definicji modułu funkcji, należy dodać następującą linię

context.callbackWaitsForEmptyEventLoop = false; 

callbackWaitsForEmptyEventLoop

  • Wartością domyślną jest true
  • Przydatne tylko zmodyfikować domyślne zachowanie wywołanie zwrotne.

Możesz ustawić tę właściwość na wartość false, aby zażądać AWS Lambda, aby zamrozić proces wkrótce po wywołaniu wywołania zwrotnego, nawet jeśli w pętli zdarzeń występują zdarzenia. AWS Lambda zamrozi proces, dowolne dane stanu i zdarzenia w pętli zdarzeń Node.js (wszelkie pozostałe zdarzenia w pętli zdarzeń przetworzone, gdy funkcja Lambda zostanie wywołana jako następna i jeśli AWS Lambda zdecyduje się użyć zamrożonego procesu)

więcej szczegółów czytać this artykuł

+0

@alish, zaznaczyłeś to jako poprawną odpowiedź. Czy mógłbyś podzielić się z wami tym, jak bardzo poprawił się on w działaniu? Miałeś 3 sekundy - 12 sekund, co teraz masz? – Zanon

0

Możesz używać starego context.done funkcję natychmiast lub dokładniej context.succeed/context.fail powrócić. Ta funkcja jest nadal dostępna w węźle 4.

Chociaż nie kończy się nagle uruchomionej Lambda, ale daje odpowiedź dla osoby dzwoniącej (jak bramka API) i działa dalej w tle, w razie potrzeby, co najwyżej ~ 15 sekundy.

Zabawne: jeśli zaplanujesz uruchomienie funkcji na później, używając setTimeout masz 15 sekund do uruchomienia bez opłat, ponieważ Lambda tylko ładuje jawnie asynchroniczne wywołania funkcji.

+0

Masz dokumentację, aby potwierdzić swoją odpowiedź? Nie mogę znaleźć żadnego. Sądziłem, że wszystko, co pozostanie w pętli zdarzeń, będzie działało podczas następnej inwokacji. – Alex

+0

Która część? Funkcje kontekstowe były częścią modelu programowania AWS Lambda (http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-using-old-runtime.html#nodejs-prog-model- oldruntime-context-methods), ale mimo że jest przestarzały, wciąż istnieje kompatybilność wsteczna i możesz przetestować ten punkt. Opóźnienie 'setTimeout' jest nieudokumentowaną ciekawostką. –