Что такое синхронная коммуникация в микросервисной архитектуре? Приведи пример.

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

Ответ

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

Ключевая характеристика: Прямая, блокирующая связь по принципу «запрос-ответ».

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

// Сервис A (клиент) синхронно вызывает Сервис B
@Service
public class OrderService {
    @Autowired
    private RestTemplate restTemplate;

    public Order processOrder(Long orderId) {
        // 1. Выполняется синхронный HTTP-запрос.
        // Поток выполнения блокируется здесь, пока не придёт ответ.
        ResponseEntity<User> response = restTemplate.getForEntity(
            "http://user-service/api/users/{userId}", // Адрес Сервиса B
            User.class,
            order.getUserId()
        );

        // 2. Только после получения ответа выполнение продолжается.
        User user = response.getBody();
        // 3. Дальнейшая логика обработки заказа с данными пользователя...
        return enrichedOrder;
    }
}

Типичные технологии:

  • REST/HTTP (Spring RestTemplate, Feign, WebClient в блокирующем режиме)
  • gRPC
  • GraphQL (запросы)

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

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

Недостатки:

  • Связность: Создаёт тесную временную связь между сервисами.
  • Отказоустойчивость: Если Сервис B недоступен или медленный, Сервис A также «падает» или зависает.
  • Масштабируемость: Ресурсы клиента заняты в ожидании, что может привести к исчерпанию пула потоков.

Альтернатива: Асинхронная коммуникация (очереди сообщений, брокеры событий).