Масштабирование и управление параллелизмом

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

Claudio Canales

Senior DevOps Engineer

Масштабирование в одной картинке

  • Больше запросов → больше параллельных запусков.
  • Каждый запуск использует среду выполнения.
  • Параллелизм = количество запусков в данный момент.

Всплеск нагрузки -> больше сред

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

Что такое параллелизм?

  • Один вызов = одна единица работы.
  • Параллелизм = количество активных вызовов сейчас.
  • Если выполняется 10 — параллелизм равен 10.

Параллельные вызовы

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

Оценка необходимого параллелизма

  • Правило: concurrency = rps * duration.
  • Сокращайте длительность — снижайте параллелизм.
  • Используйте формулу для подбора лимитов.

Формула параллелизма

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

Пример: 50 rps при 200 мс

  • 200 мс = 0,2 секунды.
  • 50 * 0,2 = 10 параллельных выполнений.
  • Быстрый код → меньше параллельных запусков.

Пример расчёта параллелизма

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

Лимиты: пул аккаунта и срез функции

  • Параллелизм ограничен на уровне аккаунта.
  • Часть пула резервируется для критической функции.
  • Остальные функции делят оставшуюся ёмкость.

Пул параллелизма аккаунта

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

Reserved Concurrency: жёсткий лимит

  • Предохранительный клапан.
  • Ограничивает параллельную работу.
  • При превышении лимита вызовы throttle.
  • «Шумная» функция не исчерпает всю ёмкость.

Жёсткий лимит Reserved Concurrency

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

Throttling: как это выглядит

  • Lambda throttle при достижении лимита параллелизма.
  • Вызывающая сторона не получает нормального ответа.
  • Throttle отображается в мониторинге.

Сигналы throttling

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

Provisioned Concurrency: тёплая ёмкость

  • Пул предварительно инициализированных сред.
  • Как правило, за alias.
  • Запросы обрабатываются быстрее.

Тёплый пул Provisioned Concurrency

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

Cold start vs provisioned

Cold start

  • Однократная задержка инициализации.
  • Первый запрос несёт затраты на запуск.

Provisioned

  • Инициализация выполнена заранее.
  • Первый запрос не платит за запуск.

Сравнение cold start и provisioned

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

Reserved vs Provisioned: разные задачи

  • Reserved управляет нагрузкой.
  • Provisioned управляет задержкой запуска.
  • В продакшене часто применяют оба подхода.

Сравнение Reserved и Provisioned

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

Защита зависимых систем

  • База данных выдерживает ограниченное число соединений.
  • Лимит параллелизма предотвращает перегрузку.
  • Всплеск трафика может привести к сбою.

Лимит параллелизма защищает базу данных

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

Всплески vs штатный трафик

  • Всплески создают много параллельных сред.
  • Медленные обработчики удерживают параллелизм высоким.
  • Лимиты сглаживают пики.
  • Оптимизация длительности — тоже стратегия масштабирования.

Всплески vs штатный трафик

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

Сбои и retry увеличивают нагрузку

  • Повторные попытки могут усилить трафик.
  • Лимиты параллелизма ограничивают масштаб сбоя.
  • Петля отказов способна перегрузить зависимости.

Retry умножают нагрузку

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

Простой рабочий процесс настройки

  • Начните с измерений.
  • Ограничьте параллелизм при появлении throttle или давления.
  • Добавьте provisioned capacity, если cold start ухудшает задержку.

Измерить -> ограничить -> прогреть

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

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

  • Параллелизм помогает осмыслить масштабирование.
  • Оценка: rps * duration.
  • Reserved ограничивает нагрузку; следите за throttle.
  • Provisioned снижает задержку cold start.

Ключевые выводы по параллелизму

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

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

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

Preparing Video For Download...