Синхронное и асинхронное взаимодействие
Иногда нужно дождаться ответа, а иногда — отправить задачу и не блокироваться.
Синхронное взаимодействие: отправитель ждёт ответа здесь и сейчас. Асинхронное: отправитель отдаёт сообщение и продолжает работу, не дожидаясь результата.
Синхронное взаимодействие
Классический HTTP-запрос: сервис A зовёт сервис B и блокируется, пока B не ответит. Просто и понятно, результат сразу. Но есть цена: A зависит от скорости и доступности B. Если B тормозит — тормозит и A. Если B упал — упал и запрос A. Связность тесная.
Асинхронное взаимодействие
Сервис A кладёт сообщение в очередь и сразу отвечает пользователю «принято». Сервис B заберёт задачу из очереди и обработает её позже. A не ждёт B и не зависит от его доступности в момент запроса. Классика: загрузил видео → «обрабатываем» → конвертация идёт в фоне.
Синхронно: A ──запрос──▶ B
A ◀─ответ─── B (A всё это время ждёт)
Асинхронно: A ──задача──▶ [ очередь ] ──▶ B (обработает позже)
A продолжает работу немедленно
Сравнение
| Критерий | Синхронное | Асинхронное |
| Результат | сразу | позже / уведомлением |
| Связность | тесная: A зависит от B | слабая: A не ждёт B |
| Сбой получателя | ломает запрос отправителя | задача ждёт в очереди |
| Пиковая нагрузка | бьёт напрямую | сглаживается очередью |
| Сложность | ниже | выше: очередь, мониторинг, статусы |
Что когда выбирать
Синхронно — когда результат нужен немедленно для продолжения (проверить пароль, получить баланс, отрисовать страницу). Асинхронно — когда задача долгая или результат не нужен прямо сейчас:
- отправка письма/пуша — пользователю не надо ждать;
- обработка видео, генерация отчёта — долго;
- рассылка событий многим подписчикам;
- сглаживание пиков: всплеск заказов кладём в очередь и переварим в своём темпе.
Цена асинхронности
Бесплатного нет. Асинхронность усложняет систему: нужно где-то показывать статус задачи, обрабатывать повторы и сбои, мириться с тем, что результат появится не мгновенно (eventual). Не делайте асинхронным то, что естественно синхронно, — получите сложность без выгоды.
Итог
- Синхронно — результат сразу, но тесная связность и зависимость от получателя.
- Асинхронно — слабая связность, сглаживание пиков, устойчивость к сбоям получателя.
- Асинхронность не бесплатна: статусы, повторы, отложенный результат — берите её под конкретную причину.