Этап 7 из 15 · ≈ 8 ч

Согласованность между сервисами

Основа с Middle

Transactional outbox, саги, CDC и идемпотентность — как не потерять данные без распределённых транзакций.

Что важно знать

  • Двойная запись: записали в базу и упали до отправки события — или наоборот. Распределённые транзакции (2PC) на практике почти не используют.
  • Outbox: событие пишется в таблицу в той же транзакции, отдельный процесс публикует его в брокер.
  • CDC: изменения читаются из журнала базы (Debezium) и превращаются в события.
  • Сага: цепочка локальных транзакций с компенсирующими действиями; хореография (события) или оркестрация (координатор).
  • Итоговая согласованность: данные сходятся со временем — интерфейс и бизнес должны это допускать.

Критерии освоения

Middle ≈ 8 ч

  • Объясняет проблему двойной записи и реализует transactional outbox

Практика. Реализовать outbox — запись заказа и события в одной транзакции и отдельный публикатор — и проверить отсутствие потерь при падениях.

Senior ≈ 8 ч

  • Проектирует сагу с компенсациями для бизнес-процесса из нескольких сервисов
  • Использует CDC (Debezium) для публикации изменений

Практика. Спроектировать сагу оформления заказа (резерв, оплата, доставка) с компенсациями и описать сценарии отказов.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Что такое сага в контексте микросервисов?Junior

Сага — цепочка локальных транзакций в разных сервисах с компенсациями вместо одной распределённой транзакции.

Полный разбор
Что такое saga pattern в микросервисах?Senior

Сага — бизнес-процесс как цепочка локальных транзакций сервисов; при сбое шага выполняются компенсирующие действия для уже сделанных шагов.

Полный разбор
Что такое Change Data Capture (CDC) и где оно полезно?Senior

CDC (change data capture) читает журнал изменений базы (WAL в PostgreSQL, binlog в MySQL) и публикует каждое изменение строки как событие — обычно в Kafka через Debezium.

Полный разбор
Чем хореография саги отличается от оркестрации и когда что выбирают?Senior

Хореография — сервисы реагируют на события друг друга, центра нет. Оркестрация — координатор с машиной состояний отдаёт команды и ждёт ответов.

Полный разбор
Почему компенсацию в саге называют бизнес-действием, а не откатом транзакции?Senior

Откатывать нечего: шаг уже закоммичен и его последствия видны. Компенсация — новая бизнес-операция, отменяющая эффект по смыслу: вернуть деньги, снять резерв, отправить письмо об отмене.

Полный разбор
Чем event отличается от command в проектировании сообщений?Middle

Событие — факт о прошлом («ЗаказОплачен»): издатель не знает, кто реагирует, подписчиков много. Команда — просьба сделать («СписатьДеньги»): адресат один, отправитель ждёт результата.

Полный разбор
Как на стороне consumer-а добиться доставки at-least-once и почему при этом появляются дубли?Middle

Сначала обработать, потом зафиксировать offset (или подтвердить сообщение). Если упасть между обработкой и фиксацией, сообщение придёт снова — отсюда дубли, и обработка должна быть идемпотентной.

Полный разбор
Чем отличаются at-most-once, at-least-once и exactly-once?Middle

At-most-once — не повторяем: возможны потери, дублей нет. At-least-once — повторяем до подтверждения: потерь нет, дубли возможны. Exactly-once — эффект ровно один раз: достигается не доставкой, а идемпотентностью или транзакциями.

Полный разбор
Клиент отправил POST для создания заказа, не дождался ответа из-за таймаута и повторил запрос. Как правильно не допустить второго заказа?Middle

Клиент генерирует ключ идемпотентности (UUID) на операцию и передаёт его в заголовке; сервер сохраняет ключ и результат в одной транзакции с созданием заказа и на повтор возвращает сохранённый ответ.

Полный разбор
Что означает идемпотентность операции?Junior

Операция идемпотентна, если состояние после одного и нескольких выполнений одинаково — повтор безопасен.

Полный разбор

Разборы темы

← Вся карта «Backend-разработчик»

Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования