Методы настройки и оптимизации производительности

Бессерверные приложения с AWS Lambda

Claudio Canales

Senior DevOps Engineer

Производительность = задержка + стоимость

  • Вы платите за время.
  • Оптимизация производительности — это и оптимизация затрат.
  • Сначала измерьте, потом настраивайте.
  • Меняйте по одному параметру за раз.

Секундомер и стоимость

Бессерверные приложения с AWS Lambda

Куда уходит время

  • Инициализация.
  • Выполнение обработчика.
  • Ожидание внешних вызовов.

Инициализация, обработчик и внешние вызовы

Бессерверные приложения с AWS Lambda

Холодный старт и тёплый старт

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

  • Lambda создаёт новое окружение.

Тёплый старт

  • Повторно использует существующее окружение.
  • Обработчик запускается с меньшими накладными расходами.

Временная шкала: холодный и тёплый старт

Бессерверные приложения с AWS Lambda

Работа при инициализации и в обработчике

  • Импорты и глобальная настройка выполняются при инициализации.
  • Тяжёлая инициализация замедляет холодный старт.
  • Длительность инициализации отражается в метриках.

Разделение инициализации и обработчика

Бессерверные приложения с 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

Минимизируйте зависимости

  • Большие пакеты загружаются дольше.
  • Удаляйте неиспользуемые зависимости.
  • Держите зависимости как можно меньше.

Лёгкий и тяжёлый пакет зависимостей

Бессерверные приложения с AWS Lambda

Логируйте разумно

  • Избыточное логирование увеличивает затраты и засоряет вывод.
  • Пишите краткие, структурированные сообщения.
  • Делайте логи удобными для поиска и отладки.

Объём логов и полезный сигнал

Бессерверные приложения с AWS Lambda

Снижение накладных расходов на внешние вызовы

  • Вызовы внешних сервисов — самая медленная часть.
  • Сокращайте число вызовов; группируйте задачи, где возможно.
  • Устанавливайте таймауты, чтобы сбои не зависали.

Минимизация внешних вызовов

Бессерверные приложения с AWS Lambda

Память влияет и на CPU

  • CPU масштабируется вместе с памятью.
  • Код, ограниченный CPU, может выполниться быстрее.
  • Больше памяти может сократить время выполнения или стоимость.
  • Тестируйте, чтобы найти оптимальное значение.

Память → CPU → быстрее выполнение

Бессерверные приложения с AWS Lambda

Найдите оптимальное соотношение затрат

  • Оптимальный объём памяти минимизирует общую стоимость.
  • Кривая сначала снижается, затем выравнивается или растёт.
  • Повторяйте тест после изменений.

Кривая стоимости в зависимости от памяти

Бессерверные приложения с AWS Lambda

Измерение с помощью CloudWatch

  • Отслеживайте Duration и Init duration.
  • Следите за ошибками и тротлингом.
  • Контролируйте хвостовые задержки (p95, p99).

Метрики производительности в CloudWatch

Бессерверные приложения с AWS Lambda

Сокращение холодных стартов

  • Сократите объём работы при инициализации.
  • Держите пакет небольшим.
  • Переиспользуйте затратные объекты.
  • Рассмотрите подготовленные окружения.

Чеклист сокращения холодных стартов

Бессерверные приложения с AWS Lambda

Ключевые выводы

  • Знайте, куда уходит время.
  • Переиспользуйте клиентов и применяйте кеш осторожно.
  • Память влияет на CPU и время выполнения.
  • Измеряйте каждое изменение.

Ключевые выводы о производительности

Бессерверные приложения с AWS Lambda

Давайте потренируемся!

Бессерверные приложения с AWS Lambda

Preparing Video For Download...