Этот вопрос проверяет понимание базовых способов взаимодействия сервисов и умение выбирать подходящий вариант под требования системы.
Синхронное взаимодействие означает, что один сервис отправляет запрос и ждёт ответа от другого сервиса. Пока ответ не получен, выполнение блокируется.
Асинхронное взаимодействие устроено иначе: сервис отправляет сообщение и продолжает работу, не ожидая немедленного ответа.
Синхронный подход проще в реализации, но хуже масштабируется. Асинхронный сложнее, но лучше подходит для высоконагруженных систем.
Синхронное и асинхронное взаимодействие — это два принципиально разных подхода к обмену данными между сервисами, которые напрямую влияют на отказоустойчивость и масштабируемость системы.
Определение:
Синхронное взаимодействие — это модель, при которой вызывающий сервис блокируется и ждёт ответа от вызываемого сервиса.
Перед тем как разобрать плюсы и минусы, важно понять ключевые характеристики:
Сервис-клиент отправляет запрос
Сервис-сервер обрабатывает его
Клиент ждёт ответ и только после этого продолжает работу
Пример (упрощённо):
response = requests.get("http://user-service/users/42")
data = response.json()
Особенности:
Простая логика
Прямая зависимость сервисов
Высокий риск каскадных отказов
Определение:
Асинхронное взаимодействие — это модель, при которой сервис отправляет сообщение и не ожидает немедленного ответа.
Здесь взаимодействие обычно строится через брокер сообщений:
Сервис публикует сообщение
Брокер принимает и хранит его
Другой сервис обрабатывает сообщение позже
Пример (идея):
producer.send("order_created", {"order_id": 42})
# сервис сразу продолжает работу
Особенности:
Сервисы слабо связаны
Лучше масштабируется
Сложнее отлаживать и тестировать
Синхронное взаимодействие удобно для простых запросов и API.
Асинхронное оправдано в нагруженных, распределённых и отказоустойчивых системах.