Проектирование отказоустойчивых приложений на AWS

Разработка приложений на AWS

Ricardo Sueiras

Principal Technologist

Построение отказоустойчивых систем

построение отказоустойчивых систем

Разработка приложений на AWS

всё может сломаться

Разработка приложений на AWS

Временные сбои

 

временные сбои

  • Изучите основные виды сбоев:
  • Временные ошибки исчезают сами по себе — как правило, безопасно повторить запрос.
Разработка приложений на AWS

Таймауты

 

таймауты

  • Изучите основные виды сбоев:
  • Временные ошибки исчезают сами по себе — как правило, безопасно повторить запрос.
  • Таймауты: внешний сервис слишком долго не отвечает.
Разработка приложений на AWS

Постоянные ошибки

 

постоянные ошибки

  • Изучите основные виды сбоев:
  • Временные ошибки исчезают сами по себе — как правило, безопасно повторить запрос.
  • Таймауты: внешний сервис слишком долго не отвечает.
  • Постоянные ошибки: запрос принципиально некорректен, повтор не поможет.
Разработка приложений на AWS

Ограничения API

 

ограничения API

  • Изучите основные виды сбоев:
  • Временные ошибки исчезают сами по себе — как правило, безопасно повторить запрос.
  • Таймауты: внешний сервис слишком долго не отвечает.
  • Постоянные ошибки: запрос принципиально некорректен, повтор не поможет.
  • Ограничения частоты запросов API: слишком много запросов, ожидайте HTTP 429 Too Many Requests.
Разработка приложений на AWS

Стратегии повторных запросов

  • Сбои в распределённых системах часто носят временный характер.
  • Повторный запрос нередко завершается успешно.
  • Добавляйте логику повторов осторожно: бесконтрольные повторы могут усугубить ситуацию.
  • Экспоненциальная выдержка: увеличивайте задержку между повторами.
  • Джиттер: добавляйте случайность, чтобы избежать всплесков повторных запросов.
  • Ограничение числа повторов: предотвращает бесконечные циклы.

 

стратегии повторных запросов

Разработка приложений на AWS

Встроенные возможности AWS SDK

  • AWS SDK автоматически управляют логикой повторных запросов.
  • Встроенный механизм повторов включает экспоненциальную выдержку и джиттер.
  • Неудачные или заблокированные запросы повторяются с нарастающими задержками.
  • Это сокращает объём кода обработки ошибок, который нужно писать вручную.

 

возможности SDK

Разработка приложений на AWS

Управление логикой повторных запросов

 

не всегда повторять

  • Логика повторных запросов подходит не всегда.
  • Ошибки HTTP 4xx: сервер понял запрос, но отклонил его.
  • Неидемпотентные запросы: повтор может привести к дублированию или несогласованности действий.
Разработка приложений на AWS

Управление таймаутами

 

управление таймаутами

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

Прерыватели цепи

  • Если сервис продолжает давать сбои, одних повторов недостаточно.
  • Продолжение отправки запросов может перегрузить неработающий сервис.
  • Паттерн «прерыватель цепи» временно останавливает запросы к нездоровой зависимости.
  • Замкнутое состояние: запросы проходят в штатном режиме.

 

прерыватели цепи

Разработка приложений на AWS

Прерыватели цепи

  • Когда число сбоев превышает порог, цепь размыкается.
  • Последующие запросы блокируются.

 

прерыватель цепи

Разработка приложений на AWS

Прерыватели цепи

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

 

прерыватель цепи

Разработка приложений на AWS

Очереди недоставленных сообщений

 

очередь недоставленных сообщений

  • Сообщения, которые постоянно не обрабатываются, могут блокировать систему.
  • Выносите их из основного потока обработки.
  • Необработанные сообщения попадают в очередь недоставленных сообщений (Dead Letter Queue).
  • Это ключевой элемент построения отказоустойчивых приложений.
  • Однако учитывайте компромиссы.
Разработка приложений на AWS

Ограничения API AWS

 

ограничения API

  • Взаимодействие с сервисами AWS происходит через API.
  • Каждый сервис устанавливает собственные ограничения частоты запросов.
  • Превышение лимитов приводит к троттлингу (HTTP 429 Too Many Requests).
  • Проектируйте приложение так, чтобы оно корректно обрабатывало троттлинг.
Разработка приложений на AWS

Интеграция со сторонними сервисами

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

 

сторонние сервисы

Разработка приложений на AWS

Интеграция со сторонними сервисами

  • Рассмотрите переход от синхронного к асинхронному взаимодействию.
  • Система продолжит работу, даже если внешний сервис задерживает ответ.

 

управление сторонними сервисами

Разработка приложений на AWS

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

Разработка приложений на AWS

Preparing Video For Download...