Вопрос проверяет понимание торговых-оффов между latency, надёжностью и связностью сервисов при выборе способа взаимодействия.
Синхронное взаимодействие используют, когда результат нужен сразу и без него нельзя продолжить обработку. Асинхронное — когда допустима задержка и важнее устойчивость системы к сбоям. Синхронные вызовы проще для понимания, но усиливают связанность и риск каскадных отказов. Асинхронные повышают отказоустойчивость и масштабируемость, но усложняют контроль потока и отладку. На практике часто используют гибридный подход.
Синхронное взаимодействие — сервис ждёт ответ от другого сервиса в рамках одного запроса.
Асинхронное взаимодействие — сервис инициирует действие и не ждёт немедленного ответа, результат приходит позже (через событие, очередь, callback).
Результат нужен немедленно
Без ответа нельзя продолжить бизнес-логику.
Пример: проверка прав доступа, расчёт цены “здесь и сейчас”.
Простой запрос–ответ
Короткие операции с предсказуемым временем ответа.
Низкая вероятность ошибок и таймаутов.
Чёткий пользовательский сценарий
Пользователь ожидает мгновенный результат (HTTP API).
Низкая нагрузка или контролируемый SLA
Сервисы хорошо масштабируются и защищены таймаутами.
Долгие или ресурсоёмкие операции
Генерация отчётов, обработка файлов, ML-инференс.
Допустима eventual consistency
Состояние может быть согласовано не сразу.
Важно избежать каскадных отказов
Если downstream недоступен, сообщение просто подождёт.
Высокая нагрузка или пики трафика
Очередь сглаживает всплески.
# Синхронно: ждём ответ
price = pricing_service.get_price(product_id)
# Асинхронно: публикуем событие и идём дальше
event_bus.publish("OrderCreated", {"order_id": order_id})
Синхронность выбирают ради простоты и немедленного результата, асинхронность — ради надёжности, масштабируемости и устойчивости к сбоям. В реальных системах почти всегда используется комбинация.