Что такое синхронное взаимодействие в микросервисной архитектуре?

«Что такое синхронное взаимодействие в микросервисной архитектуре?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Синхронное взаимодействие — это модель связи между микросервисами, при которой сервис-инициатор (клиент) отправляет запрос и блокирует выполнение, ожидая немедленного ответа от сервиса-получателя.

Основные протоколы:

  • HTTP/REST (наиболее распространен).
  • gRPC (высокопроизводительный, на основе HTTP/2).
  • GraphQL.

Пример вызова через REST API:

// Сервис A (клиент) синхронно вызывает Сервис B
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("http://service-b:8080/api/orders/123"))
        .GET()
        .build();
// Поток выполнения блокируется здесь до получения ответа
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// Дальнейшая обработка ответа
System.out.println("Статус заказа: " + response.body());

Преимущества:

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

Недостатки:

  • Связность: Вызывает временную жесткую связь (temporal coupling) — сервис-получатель должен быть доступен в момент запроса.
  • Каскадные сбои: Недоступность или медленная работа одного сервиса может "просадить" всю цепочку вызовов.
  • Ресурсы: Заблокированные потоки/соединения ожидают ответа, что может исчерпать ресурсы при высокой нагрузке.

Применение: Идеально для операций, требующих немедленного подтверждения (проверка наличия, авторизация, простые запросы данных).