Перейти к основному содержимому

Паттерны асинхрона: Request-Reply, Publish-Subscribe, Point-to-Point

Архитектурные паттерны Request-Reply, Publish-Subscribe и Point-to-Point используются для взаимодействия между компонентами системы. Часто применяются в распределённых системах и микросервисных архитектурах.

Request-Reply

Request-Reply — паттерн, в котором клиент отправляет запрос и получает ответ от сервера через очереди сообщений.

Как работает

  1. Клиент отправляет запрос в очередь сообщений.
  2. Сервер извлекает запрос из очереди и обрабатывает его.
  3. Сервер отправляет промежуточный ответ клиенту (опционально).
  4. Сервер помещает ответ в очередь ответов.
  5. Клиент извлекает ответ.

Зачем нужно

  • Для реализации асинхронного взаимодействия с обязательным ответом на запрос.
  • Подходит для микросервисов и систем, где требуется подтверждение выполнения задач.
  • Может быть реализовано через REST API.

Плюсы и минусы

Плюсы:

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

Минусы:

  • Возможна задержка при больших объёмах данных.
  • Сложность реализации для управления состоянием запросов и ответов.

Примеры: асинхронные веб-сервисы, обработка задач в распределённых системах, запросы к БД.


Publish-Subscribe

Publish-Subscribe — паттерн, в котором публикатор отправляет сообщения множеству подписчиков через брокера сообщений (например, Kafka, RabbitMQ).

Как работает

  1. Публикатор отправляет сообщение в канал (топик).
  2. Подписчики этого канала получают сообщение.

Зачем нужно

  • Для рассылки сообщений множеству получателей одновременно, например, уведомлений или обновлений.
  • Реализация API паттернов: подписка на события через WebSockets или другие механизмы push-уведомлений.

Плюсы и минусы

Плюсы:

  • Высокая масштабируемость (можно добавлять новых подписчиков без изменения кода отправителя).
  • Нет прямой зависимости между отправителем и получателями.
  • Возможность рассылать одно сообщение многим подписчикам.

Минусы:

  • Необходимость управления подписками и качеством обслуживания.
  • Непредсказуемая задержка доставки из-за обработки сообщений подписчиками.

Примеры: системы уведомлений, новостные рассылки, обновления в реальном времени, интернет вещей (IoT).


Point-to-Point

Point-to-Point — паттерн, в котором один отправитель передаёт сообщение одному получателю через очередь сообщений.

Как работает

Работает аналогично Publish-Subscribe, но сообщение доставляется только одному получателю.

Зачем нужно

  • Для гарантированной доставки сообщений одному получателю.
  • Обеспечивает строгую очередность и порядок обработки.
  • Реализуется с помощью систем управления очередями (например, JMS, RabbitMQ).

Плюсы и минусы

Плюсы:

  • Гарантированная доставка сообщений (надёжное хранение сообщений в очереди).
  • Последовательный порядок обработки сообщений.
  • Независимая работа отправителя и получателя.

Минусы:

  • Ограничение на одного получателя.
  • Потенциальная задержка из-за обработки очереди.

Примеры: очереди задач, системы обработки заказов, логирование, финансовые транзакции.


Подборка материалов по теме паттернов асинхрона

  1. Разбираемся с паттерном REPR в ASP.NET Core
  2. Синхронный «запрос-ответ» с использованием REST и Apache Kafka
  3. Request-Reply: Обзор паттернов интеграции микросервисов
  4. Паттерны асинхронных обменов на платформе Авито
  5. Обзор Publish/Subscribe
  6. PubSub (Издатель-подписчик)
  7. PubSub в браузере с помощью вебсокетов и протокола WAMP
  8. Архитектура, управляемая событиями: подробное руководство
  9. Асинхронное взаимодействие

Посты из нашего канала

  1. Apache Kafka
  2. Сравнение RabbitMQ vs Kafka
  3. Основы RabbitMQ
  4. Очереди сообщений. Основные понятия
  5. Способы асинхронного взаимодействия в API

Видео

  1. RabbitMQ- Tutorial 13- Request Reply Pattern (англ)
  2. Архитектурные концепции построения систем обмена сообщений
  3. Обзор паттернов интеграции микросервисов
  4. Системы обмена сообщениями: Точка-Точка, Message Queue Point To Point

Книги

  1. Микросервисы. Паттерны разработки и рефакторинга — Крис Ричардсон (Глава 3.3. Взаимодействие с помощью асинхронного обмена сообщениями)
  2. Распределенные системы. Паттерны проектирования — Брендан Бернс
  3. Фундаментальный подход к программной архитектуре: паттерны, свойства, проверенные методы — Марк Ричардс и Нил Форд