Асинхронная коммуникация между сервисами
Асинхронная коммуникация
Что такое асинхронная коммуникация?
Порой ответ не нужен. Точнее, ждать его нет нужды - отправили сообщение и забыли, не ждём ответа, идём по своим делам. А ответ придёт потом сам. Это асинхронность.
Технически, в таком случае используется посредник - очередь сообщений, брокер.
Программа А → ОЧЕРЕДЬ (RabbitMQ/Kafka) → Программа Б
- Программа А говорит "кладу в очередь сообщение";
- очередь говорит "сохранила, пусть лежит";
- Программа Б говорит "когда освобожусь, достану сообщение из очереди и обработаю".
Асинхронная коммуникация решает проблемы синхронной:
- в асинхронной связи сообщение полежит в очереди, пока упавший сервер не починят;
- программа А будет ждать, а не тормозить, если Б тормозит (они не зависят друг от друга);
- Б не успевает за потоком запросов? Очередь работает как буфер, сообщения копятся;
- надо отправить данные в 5 разных систем? Одно сообщение в очередь, 5 подписчиков его разбирают.
1. Клиент → Веб-сервер: "Хочу заказ, вот мои данные"
2. Веб-сервер → Клиент: "Заказ принят, спасибо!" (мгновенно)
3. Веб-сервер кладёт сообщение в RabbitMQ: "Новый заказ #123"
4. Веб-сервер идёт обрабатывать другие запросы
--- Через пару секунд ---
5. Сервис обработки заказов берёт сообщение из очереди
6. Сервис резервирует товар на складе
7. Сервис списывает деньги
8. Сервис отправляет письмо клиенту: "Заказ подтверждён"
(Клиент получил письмо через минуту, но не сидел с крутящимся прелоадером всё это время)
В асинхронной связи:
- нет мгновенного ответа, и если надо знать результат прямо сейчас, то асинхронность не подойдёт;
- сложнее отлаживать, потому что сообщение уходит в очередь, и непонятно где ошибка;
- нужен брокер (RabbitMQ/Kafka), это дополнительный компонент, который надо администрировать;
- гарантии доставки настраиваются;
- идемпотентность (если сервер упал и перезапустился, он может обработать то же сообщение дважды).
Об асинхронном транспорте
Мы уже изучали асинхронность, поэтому можем уже понять, что асинхронная коммуникация — это способ взаимодействия, при котором отправитель не ждёт немедленного ответа от получателя. Это особенно важно в распределённых системах, где синхронные вызовы могут привести к задержкам или блокировкам. При таком решении используется либо очередь, либо события. Мы их ранее рассматривали вкратце.
Примерами асинхронного взаимодействия может являться:
- SMTP, отправка электронной почты. Клиент отправляет письмо, но не ждёт подтверждения его доставки получателю.
- JMS (Java Message Service), использование очередей сообщений для передачи данных между системами.
- RabbitMQ/Kafka, брокеры
Очереди сообщений (Message Queues или MQ) подразумевает, что сообщения помещаются в очередь, и сервисы обрабатывают их по мере готовности. Примеры решений - RabbitMQ, Apache Kafka, Amazon SQS. Используется для задач, которые могут выполняться в фоновом режиме (например, отправка email).
Транспорт в асинхронной коммуникации:
- SMTP;
- AMQP;
- MQTT;
- Kafka.
SMTP (Simple Mail Transfer Protocol) — это протокол для отправки электронной почты. Он используется для передачи сообщений между почтовыми серверами или от клиента к серверу. Письмо отправляется, но доставка может занять время. Для повторной отправки в случае сбоя используются очереди.

MQTT (Message Queuing Telemetry Transport) — это лёгкий протокол для передачи данных в условиях ограниченной пропускной способности или нестабильного соединения. Он часто используется в IoT (Интернет вещей). Устройства могут подписываться на темы и получать обновления.

AMQP (Advanced Message Queuing Protocol) — это протокол для асинхронного обмена сообщениями между системами через брокеры сообщений (например, RabbitMQ). Сообщения хранятся в очередях до тех пор, пока не будут обработаны.
Apache Kafka — это платформа для потоковой передачи данных. Она позволяет системам обмениваться событиями в реальном времени. Kafka и RabbitMQ мы разберём отдельно.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Интеграция - это когда две программы умеют разговаривать друг с другом и делать общее дело. Выбор модели взаимодействия определяет архитектурные свойства системы — отзывчивость, устойчивость к сбоям, сложность отладки и масштабируемость. Интеграционные потоки часто визуализируются в виде диаграмм последовательностей (sequence diagrams) или BPMN-схем. В промышленных платформах (например, BPMSoft, ELMA365, Apache NiFi) такие потоки… Что такое интеграционная авторизация, API-ключи и как с этим работать. В распределённых системах границы стираются. Saga-паттерн, например, моделирует долгую транзакцию через цепочку локальных транзакций и компенсирующих действий. Каждый шаг Saga — это отдельная… В корпоративной среде RPC лег в основу таких технологий, как — CORBA (Common Object Request Broker Architecture) — платформенно-независимый стандарт от OMG, DCOM (Distributed Component Object Model)… Веб-сервис - это программа, которая живёт на сервере и отвечает на запросы других программ через интернет. Мы её не видим (нет никакой кнопки или картинки), но наше приложение с ней разговаривает. Любая информационная система, будь то база данных, веб-сервис, операционная система или программный модуль, существует не в изоляции. Её предназначение — реагировать на внешние и внутренние стимулы,… REST — это стиль, а не строгий протокол, может быть реализован на любом языке программирования, легко масштабируется, хорошо документируется. Пути могут содержать — параметры пути - /users/123, параметры строки запроса (или просто параметры запроса) - ?sort=datelimit=10 Реактивные взаимодействия фокусируются на обмене событиями в режиме реального времени. Системы реагируют на события по мере их возникновения, обеспечивая непрерывный поток данных. Брокер сообщений — это программное обеспечение или система, которая управляет обменом данными между приложениями, сервисами или системами. Некоторые считают брокеры сообщений как архитектурные…Интеграция
Типы взаимодействия между системами
Интеграционные потоки данных
Авторизация в интеграционных сценариях
Управление сессиями в распределённых системах
История развития интеграционных технологий
Веб-сервисы
Модель запрос-ответ в сетевом взаимодействии
API - интерфейсы прикладного программирования
HTTP как основа веб-интеграций
Реактивные системы и потоки данных
Брокеры сообщений