2016-06-20 18 views
14

Czy planowanie funkcji lambda, aby uzyskać wywołanie co 20 minut z CloudWatch najlepszym sposobem, aby pozbyć się czasów zimnego startu lambda? (nie całkowicie się pozbyć) ...Lambda zimny start możliwe rozwiązanie?

Czy to się stanie kosztowne, czy jest coś, czego mi brakuje, ponieważ mam je ustawione i myślę, że to działa.

Zanim mój czas zimnego startu będzie wynosił 10 sekund, a każde następne połączenie zakończy się w czasie 80 ms. Teraz każde połączenie, bez względu na częstotliwość, trwa około 80 ms. Czy jest to dobra metoda, dopóki nie powiesz, że twoja baza użytkowników rośnie, wtedy możesz ją wyłączyć?

Moja druga opcja to po prostu używanie łodygi fasoli i posiadanie serwera działającego 24/7, ale brzmi to drogo, więc nie preferuję tego.

Odpowiedz

13

O ile mi wiadomo, jest to jedyny sposób, aby utrzymać tę funkcję w tej chwili. Może stać się drogie tylko wtedy, gdy masz wiele z tych funkcji.

Trzeba obliczyć, ile płacisz za utrzymanie funkcji przy życiu, biorąc pod uwagę ich liczbę, czas potrzebny na ich uruchomienie i ilość potrzebnej pamięci.

Ale raz na 20 minut to około 2000 razy na miesiąc, więc jeśli użyjesz np. 128 MB i sprawiają, że kończą się poniżej 100 ms, wtedy możesz utrzymać wiele takich funkcji w odstępach 20-minutowych i nadal pozostać pod wolną warstwą - to będzie 20 sekund na miesiąc na funkcję. Nie musisz nawet wyłączać go po otrzymaniu większego obciążenia, ponieważ nie będzie to miało znaczenia w tym momencie. Poza tym nigdy nie będziesz mieć pewności, że cały czas masz równomierne obciążenie, więc możesz nawet zachować aktywny kod serca.

Chociaż domyślam się, że skoro jest tak tanio utrzymywać funkcję przy życiu (szczególnie jeśli masz specjalny argument, który sprawia, że ​​natychmiast wracają) i że różnica jest tak duża (10 sekund vs. 80 ms), to ładna wszyscy to zrobią - nie ma na to żadnego usprawiedliwienia. W takim przypadku spodziewam się, że Amazon będzie walczył z tą praktyką (czyniąc ją trudniejszą lub droższą niż jest obecnie - co nie byłoby mądrym posunięciem) lub czyniąc ją niepotrzebną w przyszłości. Jeśli różnica między początkiem gorącego i zimnego wynosiła 100 ms, nikt nie zawracałby sobie głowy. Jeśli jest to 10 sekund, niż wszyscy muszą go obejść.

Zawsze istniałaby różnica między uruchomieniem kodu, który był uruchamiany sekundę temu, a kodem, który był uruchamiany miesiąc temu, ponieważ posiadanie wszystkich w pamięci RAM i gotowych do użycia zmarnowałoby wiele zasobów, ale nie widzę powodu, dla którego różnica ta nie byłaby mniej zauważalna, a nawet miała kilka więcej kroków, zamiast tylko gorącego i zimnego startu.

+0

Dzięki za cynk. Czy jest coś szczególnego poza kodem funkcji, które może opóźnić start? Mam 2 nodejs lambdas, chociaż nawet z zimnych połączeń, jeden (158Kb) zaczyna się poniżej ~ 1sec, podczas gdy inny pod VPC-Elasticache (54Kb) zajmuje około 10seków. Ale może to ma tylko związek z ładowaną biblioteką redis, która może być intensywniejsza, niż sama instalacja? – zanona

5

Możesz poprawić czas zimnego startu, przypisując więcej pamięci do funkcji Lambda. Przy domyślnym 512 MB widzę zimne czasy startu wynoszące 8-10 sekund dla funkcji napisanych w Javie. Poprawia się to do 2-3 sekund z 1536 MB pamięci.

Amazon says że ważna jest alokacja procesora, ale nie ma możliwości bezpośredniej jej zmiany. Przydział CPU wzrasta proporcjonalnie do pamięci.

A jeśli chcesz zbliżyć się do zerowego czasu zimnego startu, utrzymywanie temperatury w cieple jest drogą do zrobienia, zgodnie z opisem sugerowanym przez rsp.

+2

Ustawia pamięć na 1536 MB.Zmniejszono czas zimnego startu z 12 sekund do 3 sekund. – Guus

+0

Wielkie lambdy zaczynają działać szybciej, także zbierają śmieci wcześniej. Innymi słowy, ich czas bezczynności jest krótszy. – sepehr