Sobes.tech
Назад к вопросам
Junior — Middle
51

Каким образом происходило взаимодействие между отдельными микросервисами в системе?

Компании, где спрашивали
СБЕР СтрахованиеСБЕР Страхование

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Обычно хотят услышать, что взаимодействие между микросервисами строилось через чётко определённые контракты: синхронно по HTTP/REST или асинхронно через брокер сообщений. Важно показать, что учитывались отказоустойчивость, таймауты, ретраи и идемпотентность. Хорошим ответом будет описание, как выбирался способ взаимодействия в зависимости от сценария.

Определение:

Взаимодействие между микросервисами — это обмен данными и событиями между независимыми сервисами для выполнения бизнес-процесса.
Оно бывает синхронным, когда один сервис ждёт ответ от другого, и асинхронным, когда сервис публикует событие или сообщение и продолжает работу, не ожидая немедленного ответа.

Пример использования:

Например, в системе интернет-магазина сервис оформления заказа вызывает сервис склада по REST, чтобы проверить остатки, а затем публикует событие OrderCreated в брокер сообщений, чтобы сервис доставки и сервис уведомлений обработали его независимо.

// Синхронный вызов через HTTP-клиент
public class WarehouseClient {
    private final HttpClient httpClient;

    public WarehouseClient(HttpClient httpClient) {
        this.httpClient = httpClient;
    }

    public boolean isInStock(String productId, int quantity) {
        // псевдокод: отправка запроса в сервис склада
        String response = httpClient.get("/warehouse/stock?productId=" + productId + "&qty=" + quantity);
        return response.contains("available");
    }
}

// Асинхронная публикация события
public class OrderService {
    private final MessageBroker broker;

    public OrderService(MessageBroker broker) {
        this.broker = broker;
    }

    public void createOrder(Order order) {
        // сохраняем заказ
        // ...
        broker.publish("OrderCreated", order);
    }
}

Пояснение кода:

В примере WarehouseClient показывает синхронное взаимодействие: сервис отправляет запрос и сразу получает ответ, чтобы принять решение, можно ли продолжать оформление заказа.
OrderService показывает асинхронное взаимодействие: после создания заказа событие публикуется в брокер, и другие сервисы реагируют на него сами.
На практике это помогает разгрузить систему и уменьшить связность между сервисами.

Ключевые моменты:

  • Синхронное взаимодействие используют, когда нужен немедленный ответ от другого сервиса.
  • Асинхронное взаимодействие подходит для событий, фоновой обработки и снижения связности.
  • Межсервисные контракты должны быть стабильными и понятными: DTO, версии API, соглашения по ошибкам.
  • Для надёжности важны таймауты, ретраи, circuit breaker и идемпотентность обработчиков.
  • Межсервисные вызовы нужно логировать и трассировать, чтобы быстро находить узкие места и ошибки.
  • Выбор способа взаимодействия зависит от требования к задержке, надёжности и согласованности данных.