Strojenie wydajności i techniki optymalizacji

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Wydajność = opóźnienie + koszt

  • Płacisz za czas.
  • Strojenie wydajności to też optymalizacja kosztów.
  • Mierz przed strojeniem.
  • Zmieniaj tylko jedną rzecz naraz.

Stoper i koszt

Serverless Applications with AWS Lambda

Na co idzie czas

  • Inicjalizacja.
  • Wykonanie handlera.
  • Oczekiwanie na wywołania zewnętrzne.

Inicjalizacja vs handler vs wywołania zewnętrzne

Serverless Applications with AWS Lambda

Zimny start vs ciepły start

Zimny start

  • Lambda potrzebuje nowego środowiska.

Ciepły start

  • Ponownie używa istniejącego środowiska.
  • Handler działa z mniejszym narzutem.

Oś czasu: zimny vs ciepły start

Serverless Applications with AWS Lambda

Praca podczas inicjalizacji vs praca w handlerze

  • Importy i konfiguracja globalna wykonują się podczas inicjalizacji.
  • Ciężka inicjalizacja spowalnia zimne starty.
  • Czas inicjalizacji widać w metrykach.

Podział: inicjalizacja vs handler

Serverless Applications with AWS Lambda

Współdziel klientów między ciepłymi wywołaniami

  • Tworzenie klienta przy każdym wywołaniu generuje zbędny koszt.
  • Używaj go ponownie, gdy środowisko jest ciepłe.

Współdzielenie globalnego klienta

Serverless Applications with AWS Lambda

Wzorzec kodu: klient poza handlerem

import boto3
sts = boto3.client("sts")
def handler(event, context):
    return sts.get_caller_identity()

Klient tworzony raz

Serverless Applications with AWS Lambda

Keszuj, co możesz

  • Trzymaj dane w pamięci.
  • Używaj /tmp na małe pliki tymczasowe.
  • Stosuj cache ostrożnie i unieważniaj go w razie potrzeby.

Cache w pamięci i w /tmp

Serverless Applications with AWS Lambda

Utrzymuj zależności w ryzach

  • Duże pakiety ładują się dłużej.
  • Usuń to, czego nie używasz.
  • Trzymaj zależności jak najmniejsze.

Lekki vs ciężki pakiet zależności

Serverless Applications with AWS Lambda

Loguj z głową

  • Zbyt dużo logów zwiększa koszty i generuje szum.
  • Dąż do zwięzłych, ustrukturyzowanych komunikatów.
  • Logi powinny być przeszukiwalne i ułatwiać śledzenie błędów.

Objętość logów vs sygnał

Serverless Applications with AWS Lambda

Ogranicz narzut wywołań zewnętrznych

  • Wywołania zewnętrznych serwisów są najwolniejsze.
  • Ogranicz je; grupuj żądania, gdy to możliwe.
  • Ustawiaj limity czasu, by błędy nie blokowały wykonania.

Minimalizowanie wywołań zewnętrznych

Serverless Applications with AWS Lambda

Pamięć wpływa też na CPU

  • CPU skaluje się wraz z pamięcią.
  • Kod intensywnie korzystający z CPU może działać szybciej.
  • Więcej pamięci może skrócić czas działania lub obniżyć koszt.
  • Testuj, by znaleźć optymalną wartość.

Pamięć → CPU → szybszy czas działania

Serverless Applications with AWS Lambda

Znajdź optymalny punkt kosztowy

  • Optymalne ustawienie pamięci minimalizuje całkowity koszt.
  • Krzywa najpierw spada, potem się spłaszcza lub rośnie.
  • Powtarzaj testy po każdej zmianie.

Krzywa koszt–pamięć

Serverless Applications with AWS Lambda

Mierz za pomocą CloudWatch

  • Śledź Duration i Init duration.
  • Monitoruj błędy i ograniczenia przepustowości.
  • Obserwuj opóźnienia ogonowe (p95, p99).

Panel metryk wydajności CloudWatch

Serverless Applications with AWS Lambda

Jak redukować zimne starty

  • Ogranicz pracę wykonywaną podczas inicjalizacji.
  • Utrzymuj pakiet w małym rozmiarze.
  • Ponownie używaj kosztownej konfiguracji.
  • Rozważ wstępnie przygotowane środowiska.

Lista kontrolna redukcji zimnych startów

Serverless Applications with AWS Lambda

Najważniejsze wnioski

  • Wiedz, na co idzie czas.
  • Współdziel klientów i stosuj cache z rozwagą.
  • Pamięć wpływa na CPU i czas działania.
  • Mierz każdą zmianę.

Kluczowe wnioski dotyczące wydajności

Serverless Applications with AWS Lambda

Czas na praktykę!

Serverless Applications with AWS Lambda

Preparing Video For Download...