Паттерны асинхрона: Request-Reply, Publish-Subscribe, Point-to-Point
Архитектурные паттерны Request-Reply, Publish-Subscribe и Point-to-Point используются для взаимодействия между компонентами системы. Часто применяются в распределённых системах и микросервисных архитектурах.
Request-Reply
Request-Reply — паттерн, в котором клиент отправляет запрос и получает ответ от сервера через очереди сообщений.
Как работает
- Клиент отправляет запрос в очередь сообщений.
- Сервер извлекает запрос из очереди и обрабатывает его.
- Сервер отправляет промежуточный ответ клиенту (опционально).
- Сервер помещает ответ в очередь ответов.
- Клиент извлекает ответ.
Зачем нужно
- Для реализации асинхронного взаимодействия с обязательным ответом на запрос.
- Подходит для микросервисов и систем, где требуется подтверждение выполнения задач.
- Может быть реализовано через REST API.
Плюсы и минусы
Плюсы:
- Уменьшает нагрузку на клиентские и серверные ресурсы за счёт асинхронной обработки.
- Обеспечивает чёткую последовательность действий благодаря очередям.
Минусы:
- Возможна задержка при больших объёмах данных.
- Сложность реализации для управления состоянием запросов и ответов.
Примеры: асинхронные веб-сервисы, обработка задач в распределённых системах, запросы к БД.
Publish-Subscribe
Publish-Subscribe — паттерн, в котором публикатор отправляет сообщения множеству подписчиков через брокера сообщений (например, Kafka, RabbitMQ).
Как работает
- Публикатор отправляет сообщение в канал (топик).
- Подписчики этого канала получают сообщение.
Зачем нужно
- Для рассылки сообщений множеству получателей одновременно, например, уведомлений или обновлений.
- Реализация API паттернов: подписка на события через WebSockets или другие механизмы push-уведомлений.
Плюсы и минусы
Плюсы:
- Высокая масштабируемость (можно добавлять новых подписчиков без изменения кода отправителя).
- Нет прямой зависимости между отправителем и получателями.
- Возможность рассылать одно сообщение многим подписчикам.
Минусы:
- Необходимость управления подписками и качеством обслуживания.
- Непредсказуемая задержка доставки из-за обработки сообщений подписчиками.
Примеры: системы уведомлений, новостные рассылки, обновления в реальном времени, интернет вещей (IoT).
Point-to-Point
Point-to-Point — паттерн, в котором один отправитель передаёт сообщение одному получателю через очередь сообщений.
Как работает
Работает аналогично Publish-Subscribe, но сообщение доставляется только одному получателю.
Зачем нужно
- Для гарантированной доставки сообщений одному получателю.
- Обеспечивает строгую очередность и порядок обработки.
- Реализуется с помощью систем управления очередями (например, JMS, RabbitMQ).
Плюсы и минусы
Плюсы:
- Гарантированная доставка сообщений (надёжное хранение сообщений в очереди).
- Последовательный порядок обработки сообщений.
- Независимая работа отправителя и получателя.
Минусы:
- Ограничение на одного получателя.
- Потенциальная задержка из-за обработки очереди.
Примеры: очереди задач, системы обработки заказов, логирование, финансовые транзакции.
Подборка материалов по теме паттернов асинхрона
- Разбираемся с паттерном REPR в ASP.NET Core
- Синхронный «запрос-ответ» с использованием REST и Apache Kafka
- Request-Reply: Обзор паттернов интеграции микросервисов
- Паттерны асинхронных обменов на платформе Авито
- Обзор Publish/Subscribe
- PubSub (Издатель-подписчик)
- PubSub в браузере с помощью вебсокетов и протокола WAMP
- Архитектура, управляемая событиями: подробное руководство
- Асинхронное взаимодействие
Посты из нашего канала
- Apache Kafka
- Сравнение RabbitMQ vs Kafka
- Основы RabbitMQ
- Очереди сообщений. Основные понятия
- Способы асинхронного взаимодействия в API
Видео
- RabbitMQ- Tutorial 13- Request Reply Pattern (англ)
- Архитектурные концепции построения систем обмена сообщений
- Обзор паттернов интеграции микросервисов
- Системы обмена сообщениями: Точка-Точка, Message Queue Point To Point
Книги
- Микросервисы. Паттерны разработки и рефакторинга — Крис Ричардсон (Глава 3.3. Взаимодействие с помощью асинхронного обмена сообщениями)
- Распределенные системы. Паттерны проектирования — Брендан Бернс
- Фундаментальный подход к программной архитектуре: паттерны, свойства, проверенные методы — Марк Ричардс и Нил Форд