Какой стиль взаимодействия используется для межсервисного общения
Что проверяют
Понимаете ли вы разницу между синхронным и асинхронным взаимодействием и цену каждого. Перечислить REST, gRPC и Kafka может любой, интервьюеру важно, как вы выбираете. Следом спрашивают, что будет, если вызываемый сервис отвечает десять секунд или лежит.
Как отвечать
Разделите варианты на два класса:
- синхронный запрос-ответ: REST поверх HTTP для публичных и простых внутренних API; gRPC на HTTP/2 с Protobuf, когда между внутренними сервисами нужны строгий контракт, стриминг и низкие задержки. В Spring для нового кода берут
RestClientили декларативные HTTP-интерфейсы с@HttpExchange, реактивный стек используетWebClient, аRestTemplateнаходится в режиме поддержки; - асинхронный обмен сообщениями: Kafka или RabbitMQ через Spring for Apache Kafka и Spring AMQP. Отправитель не ждёт получателя, сервисы не падают цепочкой, пики сглаживаются очередью.
Дальше различайте команды («создай счёт») и события («заказ оформлен»), а для процессов через несколько сервисов называйте сагу: хореографию на событиях или оркестрацию. Распределённые транзакции через двухфазный коммит в микросервисах почти не используют.
Обязательно скажите про устойчивость синхронных вызовов: таймауты на соединение и чтение, повторы с экспоненциальной задержкой только для идемпотентных операций, circuit breaker и bulkhead из Resilience4j. Контракты фиксируют через OpenAPI, .proto или схемы в Schema Registry, трассировку в Spring Boot 3 дают Micrometer Tracing и OpenTelemetry.
Итоговая формула: синхронно, когда ответ нужен прямо сейчас, асинхронно, когда достаточно знать, что работа будет сделана.
Где спотыкаются
Предлагают SOAP как равноправный вариант для новых микросервисов. Он встречается в интеграциях с банками и госсистемами, но не как выбор по умолчанию.
Строят длинные цепочки синхронных вызовов без таймаутов. У ряда HTTP-клиентов таймаут по умолчанию не ограничен, и один зависший сервис съедает потоки у всех, кто его вызывает.
Ставят повторы на неидемпотентные операции вроде списания денег. Без ключа идемпотентности ретрай превращает один платёж в два.