Налаштування продуктивності та оптимізація

Безсерверні застосунки з AWS Lambda

Claudio Canales

Senior DevOps Engineer

Продуктивність = затримка + вартість

  • Ви платите за час.
  • Тюнінг продуктивності = оптимізація вартості.
  • Виміряйте, перш ніж тюнити.
  • Змінюйте по одній речі за раз.

Секундомір і вартість

Безсерверні застосунки з AWS Lambda

Куди зникає час

  • Ініціалізація.
  • Виконання обробника.
  • Очікування зовнішніх викликів.

Ініціалізація vs обробник vs зовнішні виклики

Безсерверні застосунки з AWS Lambda

Холодний старт vs теплий старт

Холодний старт

  • Lambda створює нове середовище.

Теплий старт

  • Повторно використовує наявне середовище.
  • Обробник працює з меншими накладними витратами.

Шкала часу: холодний vs теплий

Безсерверні застосунки з AWS Lambda

Робота init vs робота обробника

  • Імпорти й глобальна ініціалізація виконуються в init.
  • Важка init сповільнює холодні старти.
  • Тривалість init видно в метриках.

Поділ: init vs обробник

Безсерверні застосунки з AWS Lambda

Повторно використовуйте клієнти між теплими викликами

  • Створення клієнта щоразу повторює витрати.
  • Повторно використовуйте його в теплому середовищі.

Глобальне повторне використання клієнта

Безсерверні застосунки з AWS Lambda

Шаблон коду: клієнт поза обробником

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

Клієнт створено один раз

Безсерверні застосунки з AWS Lambda

Кешуйте все, що можна

  • Тримайте дані в пам'яті.
  • Використовуйте /tmp для малих тимчасових файлів.
  • Кешуйте обережно й інвалідовуйте за потреби.

Кеш у пам'яті та /tmp

Безсерверні застосунки з AWS Lambda

Тримайте залежності «стрункими»

  • Великі пакети довше завантажуються.
  • Приберіть те, чим не користуєтесь.
  • Тримайте залежності якомога меншими.

Стрункий vs важкий пакет залежностей

Безсерверні застосунки з AWS Lambda

Логуйте з розумом

  • Надмірне логування додає вартість і шум.
  • Пишіть короткі структуровані повідомлення.
  • Залишайтеся придатними до пошуку; допомагайте трасуванню й налагодженню.

Обсяг логів vs сигнал

Безсерверні застосунки з AWS Lambda

Зменшуйте накладні витрати зовнішніх викликів

  • Виклики до інших сервісів — найповільніші.
  • Зменшуйте їх; об'єднуйте в партії, коли можливо.
  • Ставте тайм-аути, щоб збої не «висіли».

Мінімізуйте зовнішні виклики

Безсерверні застосунки з AWS Lambda

Пам'ять також впливає на CPU

  • CPU масштабується разом із пам'яттю.
  • CPU-залежний код може завершуватись швидше.
  • Більше пам'яті може зменшити тривалість або вартість.
  • Тестуйте, щоб знайти оптимум.

Пам'ять -> CPU -> швидший час виконання

Безсерверні застосунки з AWS Lambda

Знайдіть «солодку точку» вартості

  • Найкраще значення пам'яті мінімізує загальну вартість.
  • Крива спадає, потім вирівнюється або зростає.
  • Перетестуйте після змін.

Крива «вартість vs пам'ять»

Безсерверні застосунки з AWS Lambda

Вимірюйте в CloudWatch

  • Відстежуйте Duration і Init duration.
  • Відстежуйте помилки та обмеження.
  • Слідкуйте за «хвостовими» затримками (p95, p99).

Панель метрик CloudWatch

Безсерверні застосунки з AWS Lambda

Зменшення холодних стартів

  • Скоротіть те, що виконується в init.
  • Тримайте пакет «струнким».
  • Повторно використовуйте дорогі налаштування.
  • Розгляньте підготовлені середовища.

Чекліст зі зменшення холодних стартів

Безсерверні застосунки з AWS Lambda

Головні висновки

  • Розумійте, куди йде час.
  • Повторно використовуйте клієнти й кешуйте обережно.
  • Пам'ять впливає на CPU і тривалість.
  • Вимірюйте кожну зміну.

Ключові висновки про продуктивність

Безсерверні застосунки з AWS Lambda

Давайте потренуємось!

Безсерверні застосунки з AWS Lambda

Preparing Video For Download...