Wesprzyj nas i przeglądaj Hejto bez reklam

Zostań Patronem
#programowanie #aws
Mam sobie taką lambdę która jest mocno używana, ale jej cold start zajmuje 50s, przez co api gateway nie pozwala go wykonać (bo wywala timeout po 30s, i nie moge go zmienić z tego co czytałem).
W związku z tym, chciałem jej dać provisioned concurrency, żeby zawsze była aktywna.

Czy wg tej konfiguracji, ta funkcja będzie aktywna 24/7 i może ogarnąć do 10 requestów naraz?
Wg. kalkulatora to ma kosztować prawie 150$ na miesiąc więc to zmniejszyłem do 1, ale pytam czy dobrze rozumiem co robie XD
a6d1a204-95a2-43e0-9823-337526f80f12
20

Komentarze (20)

A dlaczego jej cold start zajmuje 50s?

@redve nie możesz normalnie bukwami i w rublach podawać?

nic nie rozumiem

@skorpion - wszytko już OPowi wyjaśniłem w swoich komentarzach - nawet taki lajkonik ja Ty zrozumie 😜

Provisioned concurrency=10 oznacza 10 aktywnych jednocześnie środowisk uruchomieniowych. Jeśli jeden request wykonuje się 1ms to wtedy przy concurrency=10 masz 10000 requestów na sekundę

@redve 50 sekund cold start ??? Co to za potwor? Jaki jezyk programowania? Java, C ? Lambda jest w VPC? Włącz se X-Ray coś jetsy bardzo bardzo nie tak

@ostrynacienkim @pierdonauta_kosmolony kod w pythonie który wczytuje biblioteke pytorch (jakies 600mb) a potem model pytorch (model ma jakieś 350mb)

jak sie wczyta to jest ok, ale wczytywanie długo trwa

@redve

Przydałoby się coś w stylu snapshotu pamięci, jak mają VM-y, tudzież jak działają zygoty procesów w Androidzie.

Może zamiast lambdy działającej i tak w kółko opłacalniejszy byłby kontener fargate?

@ostrynacienkim libka i model są na EFS, bo lambda za chiny ich nie zmieści.

To co wrzuciłeś, wymaga dodatkowego bulenia za ECR. Ten cold start nie jest wcale aż takim problemem

@redve zmiesci jakk uzyjesz lambdy dokerowej - patrz zamieszczony link. Co do ECS... koniecc koncow to Twoj projekt, budzet, mozliwosci i ograniczenia, chcialem pomoc 😉

@ostrynacienkim - zamiast Lambdy czy ECS można po prostu sobie ustawić prostą Auto Scaling Group, która uruchamia instancję tylko na czas wykonywania obliczeń.

Do tego jeśli OPowi zależy na krótkim czasie startu aplikacji to może sobie użyć Warm Pools: https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html - ale to już kosztuje dodatkowe pieniążki.

@koszotorobur ja sie nie wgryzalem w temat to nie moj projekt i nie ma fakturki na koniec 😉 Co do ASG i EC2 to mozna i uzyc spot instancji bedzie jeszcze taniej. Warm poole i snap starty tez spoczko (wdzie ze dodali w koncu pajtona), ino spap start:


SnapStart does not support provisioned concurrency, Amazon Elastic File System (Amazon EFS), or ephemeral storage greater than 512 MB.


a op pisal ze uzywa efs'a i wlasnie provisioned concurrency


edit: poza tym polecam to awsowe Q jest calkiem dobre jako wyszukiwarka w ich doksach bo do niczego innego sie nie nadaje 😛

@ostrynacienkim - Hejto to jedyne miejsce gdzie pomagam za darmo - poza tym Op to dobry ziomeczek, dopiero na starcie swojej kariery - niech się więc zdrowo rozwija 😀

Poza tym sam musi też pokombinować co jest możliwe a co nie bo nawet nie wszystko wynika wprost z dokumentacji lub można przeoczyć. Niemniej jak to z AWSem... oferują wiele usług (i tylko coraz więcej), którymi można osiągnąć ten sam cel - tylko różnym kosztem - więc staram się naświetlić OPowi, że są w AWSie też inne opcje - ale czy tańsze dla jego zastosowania to już będzie musiał sprawić sam 😉

@koszotorobur a to tero rozumim, to jak cos tez moge pomoc nie ma problemu, ale skoro sie znacie to zostawie pola dla Ciebie skoro ogarniasz chmurke 😃

@ostrynacienkim - najważniejsze jest by brać udział w dyskusji a nie się z niej wycofywać bo ktoś coś tam już napisał - bo tu na Hejto nie ma za dużo technicznych osób - a jak są to się nie udzielają - a miło sobie tak na techniczne tematy podyskutować 😃

@koszotorobur zgadzam sie, propnuje nowa komitywe utworzyc czy tez spolecznosc (jak nie ma ;D)

@ostrynacienkim - na Hejto społeczności nie za bardzo działają - możemy jedynie tagować #komputery czy #programowanie czy #it czy też #informatyka i liczyć, że każdy tak będzie tagował 🤷

@redve - Nie napisałeś nic o ustawieniach Lambdy jak CPU oraz jej timeout.

CPU skaluje się wprost proporcjonalnie do ustawienia pamięci:

Function memory allocation

128 MB to 10,240 MB, in 1-MB increments.

Note: Lambda allocates CPU power in proportion to the amount of memory configured. You can increase or decrease the memory and CPU power allocated to your function using the Memory (MB) setting. At 1,769 MB, a function has the equivalent of one vCPU.

Maksymalny timeout dla funkcji lambda jaki możesz ustawić to 15 minut:

Function timeout

900 seconds (15 minutes)

Do tego funkcja w kontenerze zmieści więcej (w porównaniu do całkowitych 250 MB standardowej lambdy):

Container image code package size

10 GB (maximum uncompressed image size, including all layers)

Pokombinuj z tymi ustawieniami by wszystko działało jak należy.

Źródło: https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html


Do tego Python 3.12 i wyższy wspiera SnapStart - ale obrazy kontenera nie są wspierane: https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html


A tu masz trzyczęściowy poradnik jak ustawić Lambdę by zminimalizować Cold Start:


  1. https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-1/

  2. https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-2/

  3. https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-3/

Zaloguj się aby komentować