Жизненный цикл событий: повторные попытки, DLQ и маршруты

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

Claudio Canales

Senior DevOps Engineer

Жизненный цикл события: обзор

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

Схема жизненного цикла события

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

Два вида сбоев

Синхронный режим

  • Вызывающая сторона ждёт и получает ответ с ошибкой.

Асинхронный режим

  • Вызывающая сторона сразу получает подтверждение.
  • Lambda выполняет повторные попытки в фоне.
  • Обработка сбоев зависит от режима вызова.

Пути обработки ошибок: синхронный и асинхронный

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

Повторные попытки — это норма

  • Повторные попытки — это полезная возможность, а не дефект.
  • Временный сбой может устраниться при следующей попытке.
  • Повторные попытки могут привести к дублированию: обработчик должен это учитывать.

Аналогия с повторным набором номера

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

Повторные попытки во времени

  • Повторные попытки помогают справиться с временными сбоями.
  • Но одно событие может обработаться несколько раз.
  • Идемпотентность и чёткая обработка ошибок обязательны.

Хронология повторных попыток

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

Когда повторные попытки опасны

  • Повторные попытки опасны, если операция не идемпотентна.
  • Примеры: списание с карты, отправка письма.
  • Используйте ключи идемпотентности и безопасные обновления, чтобы дубликаты не причиняли вреда.

Схема цели идемпотентности

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

DLQ (Dead-Letter Queue)

  • Место для событий, которые не удалось обработать после всех попыток.
  • Как правило, это очередь SQS — управляемая очередь сообщений AWS.
  • Изучите полезную нагрузку, устраните проблему и повторно запустите событие.

Аналогия DLQ с бюро находок

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

DLQ и Destinations: в чём разница

Аналогия DLQ с бюро находок

  • Сохраняет события, завершившиеся ошибкой после всех повторных попыток.
  • Используется для анализа сбоев.

Схема маршрутизации Destinations

  • Маршрутизируют результат в зависимости от успеха или сбоя.
  • Позволяют явно задать пути для обоих исходов.
Бессерверные приложения с AWS Lambda

Destinations: маршруты успеха и сбоя

  • При успехе результат отправляется в onSuccess.
  • При сбое детали передаются в onFailure.
  • Это делает следующий шаг явным.

Схема маршрутизации Destinations

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

Настройка политики повторных попыток

  • Настройте количество повторных попыток Lambda.
  • Ограничьте возраст события, чтобы не обрабатывать устаревшие данные.
  • Больше попыток повышают надёжность, но увеличивают дублирование и задержки.

Настройки политики повторных попыток

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

Максимальный возраст события: срок годности

  • Максимальный возраст события — это политика истечения срока.
  • Если событие слишком старое, его обработка может не иметь смысла.
  • Компромисс: меньше запоздалых событий, более своевременное поведение.

Аналогия со сроком годности события

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

Наблюдаемость: где искать

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

Логи и метрики

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

Что делать с событиями, завершившимися ошибкой

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

Цикл восстановления после сбоя событий

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

Основные выводы

  • Надёжность обеспечивают повторные попытки, маршрутизация и наблюдаемость.
  • Синхронные ошибки передаются вызывающей стороне.
  • Асинхронные ошибки требуют повторных попыток и DLQ или Destinations.
  • Это позволяет не терять сбои из виду.

Схема формулы надёжности

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

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

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

Preparing Video For Download...