Синхронное vs Асинхронное взаимодействие¶
Системы могут взаимодействовать друг с другом синхронно или асинхронно, в зависимости от того, ожидает ли вызывающая сторона немедленного ответа от получателя.
Синхронное взаимодействие¶
Синхронное взаимодействие — это когда отправитель делает запрос и ждёт ответа, прежде чем продолжить выполнение.
Признаки:¶
-
Блокирующий вызов: вызывающая система “заморожена”, пока не получит ответ.
-
Используется, когда результат важен немедленно.
-
Простая логика, но высокая связность между сервисами.
Примеры:
-
HTTP-запросы (REST API, SOAP).
-
SQL-запрос к БД.
-
gRPC с ожиданием ответа.
Плюсы:
-
Простота реализации и отладки.
-
Быстрая обратная связь.
Минусы:
-
Задержки и зависимость от времени отклика другой стороны.
-
Невысокая отказоустойчивость: если сервис недоступен — ошибка.
-
Меньшая масштабируемость.
Асинхронное взаимодействие¶
Асинхронное взаимодействие — это когда отправитель не ждёт ответа сразу, а может продолжить выполнение, пока ответ не поступит позже (или вовсе не нужен).
Признаки:¶
-
Неблокирующий вызов.
-
Обмен через очереди сообщений или события.
-
Используется для повышения производительности и отказоустойчивости.
Примеры:
-
Отправка сообщения в очередь (RabbitMQ, Kafka).
-
Webhooks.
-
Email-уведомления.
-
Отложенная обработка заказов.
Плюсы:
-
Высокая масштабируемость и устойчивость.
-
Нет жёсткой привязки во времени между отправителем и получателем.
Минусы:
-
Более сложная реализация (например, повторные попытки, обработка ошибок).
-
Задержка в обработке (в зависимости от системы).
-
Необходимость отслеживать состояние.
Сравнение¶
| Характеристика | Синхронное | Асинхронное |
|---|---|---|
| Ожидание ответа | Да | Нет |
| Связность систем | Высокая | Низкая |
| Скорость отклика | Мгновенно (если всё работает) | С задержкой |
| Масштабируемость | Ограниченная | Хорошая |
| Примеры | REST API, SOAP, SQL | Kafka, Webhooks, Email |
Когда использовать что?¶
-
Синхронное — для запросов, где нужен немедленный результат (логин, запрос баланса).
-
Асинхронное — для операций, которые можно выполнить позже (отправка письма, генерация отчёта).