Ladění výkonu a optimalizační techniky

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Výkon = latence + náklady

  • Platíš za čas.
  • Ladění výkonu je zároveň optimalizace nákladů.
  • Nejdřív měř, pak lad.
  • Měň vždy jen jednu věc najednou.

Stopky a náklady

Serverless Applications with AWS Lambda

Kam čas mizí

  • Inicializace.
  • Spuštění handleru.
  • Čekání na externí volání.

Init vs handler vs externí volání

Serverless Applications with AWS Lambda

Studený start vs teplý start

Studený start

  • Lambda potřebuje nové prostředí.

Teplý start

  • Znovupoužívá existující prostředí.
  • Handler běží s menší režií.

Časová osa: studený vs teplý start

Serverless Applications with AWS Lambda

Práce v init vs práce v handleru

  • Importy a globální nastavení probíhají při inicializaci.
  • Náročná inicializace zpomaluje studené starty.
  • Doba inicializace se zobrazuje v metrikách.

Rozdělení: init vs handler

Serverless Applications with AWS Lambda

Znovupoužívej klienty při teplých voláních

  • Vytváření klienta při každém volání opakuje zbytečné náklady.
  • Znovupoužij ho, když je prostředí teplé.

Znovupoužití globálního klienta

Serverless Applications with AWS Lambda

Vzor kódu: klient mimo handler

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

Klient vytvořen jednou

Serverless Applications with AWS Lambda

Cachuj, co jde

  • Uchovávej data v paměti.
  • Používej /tmp pro malé dočasné soubory.
  • Cachuj uvážlivě a invaliduj, když je potřeba.

Cache v paměti a /tmp

Serverless Applications with AWS Lambda

Drž závislosti štíhlé

  • Velké balíčky se načítají déle.
  • Odstraň závislosti, které nepoužíváš.
  • Udržuj závislosti co nejmenší.

Odlehčený vs těžký balíček závislostí

Serverless Applications with AWS Lambda

Loguj chytře

  • Příliš mnoho logování zvyšuje náklady i šum.
  • Cíl na krátké, strukturované zprávy.
  • Logy musí být prohledávatelné a pomáhat při ladění.

Objem logů vs signál

Serverless Applications with AWS Lambda

Snižuj režii externích volání

  • Volání externích služeb jsou nejpomalejší částí.
  • Omez volání; kde je to možné, seskupuj je do dávek.
  • Nastav timeouty, aby chyby nezpůsobovaly zaseknutí.

Minimalizace externích volání

Serverless Applications with AWS Lambda

Paměť ovlivňuje i CPU

  • CPU se škáluje s pamětí.
  • Kód omezený CPU pak může skončit rychleji.
  • Více paměti může zkrátit dobu běhu nebo snížit náklady.
  • Testuj a hledej optimální hodnotu.

Paměť -> CPU -> rychlejší běh

Serverless Applications with AWS Lambda

Najdi optimální bod nákladů

  • Nejlepší nastavení paměti minimalizuje celkové náklady.
  • Křivka klesá, pak se zploští nebo stoupá.
  • Po každé změně testuj znovu.

Křivka nákladů vs paměti

Serverless Applications with AWS Lambda

Měř pomocí CloudWatch

  • Sleduj Duration a Init duration.
  • Sleduj chyby a omezení (throttles).
  • Hlídej tail latence (p95, p99).

Výkonnostní metriky CloudWatch

Serverless Applications with AWS Lambda

Omezování studených startů

  • Zmenši objem práce v init.
  • Udržuj balíček odlehčený.
  • Znovupoužívej náročné nastavení.
  • Zvaž předem připravená prostředí.

Checklist pro omezení studených startů

Serverless Applications with AWS Lambda

Klíčové poznatky

  • Vědět, kam čas mizí.
  • Znovupoužívat klienty a cachovat uvážlivě.
  • Paměť ovlivňuje CPU i dobu běhu.
  • Měřit každou změnu.

Klíčové poznatky o výkonu

Serverless Applications with AWS Lambda

Pojďme cvičit!

Serverless Applications with AWS Lambda

Preparing Video For Download...