Архитектурные стили и паттерны взаимодействия
Разработка приложений на AWS
Ricardo Sueiras
Principal Technologist
Ваш инструктор
Что такое архитектурные паттерны?
Готовое решение для типовой задачи.
Паттерны помогают понять, как сочетать сервисы AWS.
Архитектура определяет поведение приложения под нагрузкой.
Существует несколько ключевых архитектурных паттернов.
Монолиты
Единый, тесно связанный модуль.
Одна кодовая база, одно развёртывание.
Просто разрабатывать на начальном этапе.
Масштабировать сложно: всё масштабируется целиком.
Микросервисы
Небольшие независимые сервисы: каждый отвечает за одну бизнес-функцию.
Каждый сервис развёртывается, масштабируется и обновляется независимо.
Компромисс: выше операционная сложность и накладные расходы на взаимодействие сервисов.
Бессерверная архитектура
Не нужно управлять инфраструктурой — только код и конфигурация.
Приложение строится из управляемых сервисов AWS.
AWS берёт на себя подготовку ресурсов, масштабирование и обслуживание.
Компромисс: ограничения времени выполнения, холодные старты, привязка к поставщику.
Почти нулевые эксплуатационные расходы и автоматическое масштабирование.
Событийно-ориентированная архитектура (EDA)
Компоненты взаимодействуют через события, а не прямые вызовы.
Событие фиксирует произошедшее действие (заказ оформлен, платёж получен, товар отправлен).
Производители генерируют события.
Потребители подписываются на нужные им события.
Тесная и слабая связанность систем
Современные облачные приложения состоят из множества сервисов.
Сервисы должны взаимодействовать и координироваться для выполнения задач.
Синхронное взаимодействие — тесная связанность.
Асинхронное взаимодействие — слабая связанность.
Синхронное взаимодействие
Сервис отправляет запрос и ждёт ответа.
Вызывающая сторона заблокирована до получения ответа или истечения таймаута.
Просто реализовать и понять.
Тесная связанность: замедление или сбой нижестоящего сервиса может распространиться каскадом.
Снижайте риски с помощью таймаутов, повторных попыток и автоматических выключателей.
Паттерн: запрос/ответ
Основа большинства интерфейсов приложений.
Предсказуемое поведение.
Мгновенная обратная связь для пользователей.
Асинхронное взаимодействие
Отправитель не ждёт ответа.
Отправляет сообщение или событие и продолжает обработку.
Получатель обрабатывает сообщение независимо.
Слабая связанность: лучшая масштабируемость и отказоустойчивость.
Справляется с пиками нагрузки и частичными сбоями.
Сложности: дублирование сообщений, порядок доставки, итоговая согласованность.
Паттерн: разделение через очередь
Производитель помещает сообщения в очередь.
Потребитель извлекает и обрабатывает сообщения независимо.
Предотвращает каскадное распространение сбоев.
Производитель и потребитель масштабируются независимо.
Паттерн: очередь обработчиков
Несколько обработчиков извлекают сообщения из одной очереди.
Сообщения обрабатываются параллельно.
Обеспечивает горизонтальное масштабирование и высокую пропускную способность.
Порядок сообщений не гарантирован.
Паттерн: издатель/подписчик
Издатели отправляют сообщения в топик SNS.
Несколько подписчиков получают одно и то же сообщение.
Широковещательная рассылка в реальном времени множеству потребителей.
Паттерн: веерная рассылка
Одно сообщение доставляется нескольким потребителям одновременно.
Широко используется в событийно-ориентированных архитектурах.
Применяется, когда несколько сервисов должны реагировать на одно событие.
Порядок сообщений
Некоторые рабочие нагрузки требуют строгого порядка обработки сообщений.
Amazon SQS FIFO и Kinesis поддерживают упорядоченную обработку.
Строгий порядок снижает пропускную способность.
Ищите баланс между корректностью и масштабируемостью.
Давайте потренируемся!
Разработка приложений на AWS
Preparing Video For Download...