Jak działa po zmianach funkcja Lambda wewnątrz VPC?
Kilka tygodni temu AWS ogłosił zmiany w pracy funkcji Lambda wewnątrz VPC. Do tej pory umieszczanie funkcji Lambda wewnątrz sieci było, lekko mówiąc, słabym rozwiązaniem. Lambdy uruchamiały się długo, słabo się skalowały. Co się zmieniło w samej implementacji możesz przeczytać na blogu AWS. Ja sprawdziłem jak działa po zmianach funkcja Lambda wewnątrz VPC.
Poprzednio Lambdy testowałem przy okazji konferencji 4Developers. Więcej o tym tutaj. Teraz jednak zrobiłem to trochę inaczej.
Na środowisko 😉 testowe składały się:
- VPC (3 AZ),
- funkcji Lambda,
- Application Load Balancer,
- maszyna wirtualna do odpalenia testów obciążeniowych.
Testy obciążeniowe przeprowadzałem za pomocą artillery. Nie było to nic wysublimowanego, akcja była następująca:
artillery quick --count 1000 -n 10 http://loadbalancer.com
W skrócie, 1000 wirtualnych użytkowników wysyłało po 10 requestów do load balancera, a ten oczywiście wywoływał funkcję Lambda.
Sama Lambda była także bardzo prosta. W zasadzie nie robiła nic. Zapisywała do logów unikalny id dla każdej instancji funkcji, oraz zwracała prosty html.
Dodatkowo przetestowałem także jej działanie z dodanym wewnątrz funkcji jej uśpieniem na 0,5 sekundy.
Za każdym razem wywoływałem więc Lambdę 10000 razy. Każdy test był powtórzony 3 razy. W sumie wykonałem 6 testów:
- Lambda bez VPC, bez opóźnienia,
- Lambda bez VPC, z opóźnieniem 0,5s,
- Lambda wewnątrz VPC, bez opóźnienia (3 availability zony),
- Lambda wewnątrz VPC, z opóźnieniem 0,5s (3 availability zony),
- Lambda wewnątrz VPC, bez opóźnienia (1 availability zona),
- Lambda wewnątrz VPC, z opóźnieniem 0,5s (1 availability zona).
Nie przedłużając, wyniki:
Test | Czas wykonania [s] | Ilość utworzonych instancji funkcji |
---|---|---|
bez VPC | 10 | 63 |
bez VPC - 0,5s | 28 | 446 |
VPC (3AZ) | 21 | 44 |
VPC (3AZ) - 0,5s | 27 | 441 |
VPC (1AZ) | 21 | 82 |
VPC (1AZ) - 0,5s | 28 | 442 |
Poprzednie testy wykonałem trochę inaczej, funkcja była wywoływana za pomocą kolejki SQS. Nie można więc bezpośrednio porównać wyników. Ale jest duuuuużo lepiej 🙂 Nie trzeba już będzie rezygnować z Lambdy, np. na rzecz kontenerów, w przypadku konieczności uruchamiania Lambdy w VPC. A nieraz trzeba to robić.
Zostawiam Was, wyciągnijcie wnioski. Zróbcie swoje testy.
Ja lecę pisać maile do klientów. Będą zmiany w architekturach.