Какая инфраструктура приложения: сервисы, базы данных, очереди и их взаимодействие
Что проверяют
Обычно это вопрос про ваш реальный проект: понимаете ли вы систему шире своего сервиса. Интервьюер ждёт, что вы нарисуете схему и объясните, почему связи устроены именно так. Следом спрашивают про отказы: что будет, если брокер недоступен или сервис упал посередине операции.
Как отвечать
Идите по пути запроса, от входа к данным, и называйте свои технологии и масштаб:
- вход: балансировщик или API-шлюз (Nginx, Spring Cloud Gateway), где проверяется авторизация;
- сервисы: сколько их, на чём написаны (Spring Boot, версия Java), кто за какой домен отвечает, где развёрнуты, например в Kubernetes;
- синхронные связи: REST или gRPC, таймауты, повторы, circuit breaker через Resilience4j;
- базы данных: у каждого сервиса своя схема или база, PostgreSQL для транзакций, Redis для кэша и сессий, миграции через Flyway или Liquibase;
- очереди: Kafka или RabbitMQ и зачем они здесь. Развязать сервисы, сгладить пики, раздать событие нескольким потребителям;
- наблюдаемость: метрики в Prometheus и Grafana, логи в ELK или Loki, трейсинг через OpenTelemetry.
Сильный ответ показывает понимание гарантий. Kafka и RabbitMQ в типичной настройке дают доставку «хотя бы один раз», поэтому потребители должны быть идемпотентными. Запись в базу и отправка события не становятся атомарными от одной @Transactional, для этого есть паттерн transactional outbox. Для сообщений, которые не удаётся обработать, нужна очередь недоставленных сообщений (DLQ).
Называйте свои цифры: RPS, объём данных, число сервисов. Если всю систему вы не знаете, честно очертите свою зону и то, что знаете о соседях.
Где спотыкаются
Пересказывают учебник про микросервисы вместо своего проекта. Интервьюер спросит про конкретный сбой на проде, и ответ рассыплется.
Отправляют сообщение в Kafka внутри транзакции базы и считают, что при откате оно тоже откатится. На деле событие уходит, а данных в базе нет, или наоборот.
Используют одну базу на все сервисы и называют это микросервисами. Любое изменение схемы тогда требует согласованного релиза нескольких команд.