Синхронное взаимодействие

Базовый System Design
≈ 2 мин чтения

Вызывающий сервис ждёт ответ

При синхронном взаимодействии сервис A отправляет запрос сервису B и не может завершить текущую операцию, пока не получит ответ или ошибку. Такая модель естественна, когда результат нужен прямо сейчас.

Text
Client -> Service A -> Service B
          waits...      |
             <-----------+

Например, сервис оформления заказа может запросить у сервиса цен актуальную стоимость товара, если без неё невозможно сформировать ответ пользователю.

Преимущество — простой поток выполнения

Код легко читать: отправили запрос, получили ответ, продолжили вычисление. Ошибку можно сразу связать с текущей пользовательской операцией, а клиент получает результат в рамках одного запроса.

Java
HttpRequest request = HttpRequest.newBuilder(priceUri)
        .timeout(Duration.ofSeconds(2))
        .GET()
        .build();

HttpResponse<String> response = httpClient.send(
        request,
        HttpResponse.BodyHandlers.ofString()
);

Цена — зависимость по времени

Пока B отвечает медленно, A тоже удерживает свой запрос дольше. Если A последовательно вызывает несколько сервисов, задержки складываются, а недоступность одного участника может сорвать всю цепочку.

Поэтому у синхронных вызовов должны быть ограниченные таймауты и понятное поведение при ошибке. Бесконечно ждать удалённый сервис нельзя: зависший вызов постепенно съедает ресурсы вызывающей стороны.

Синхронность хороша, когда ответ действительно нужен сейчас. Если текущая операция может завершиться без результата удалённой работы, асинхронная модель часто уменьшает временную связанность.

Проверь себя

Когда Service A синхронно вызывает Service B, что происходит с текущей операцией A?

Разбор задания

Ментор знает решение и поможет тебе прийти к нему самостоятельно
Ментор
Можем обсудить текущее задание или любую теорию по System Design. Я помогу разобраться и найти следующий шаг.
Войди, чтобы использовать Ментора Ментор учитывает текущую задачу и историю диалога.
Войти