Что такое saga pattern в микросервисах?
- Как сделать транзакцию через несколько микросервисов?
Сага — бизнес-процесс как цепочка локальных транзакций сервисов; при сбое шага выполняются компенсирующие действия для уже сделанных шагов.
- Вместо распределённой транзакции и двухфазного коммита
- Компенсация — бизнес-действие (вернуть деньги), а не откат
- Хореография (события) или оркестрация (координатор)
А ещё Промежуточные состояния видны — изоляции нет, нужны статусы и защита от аномалий
Подробно
Она нужна, когда нельзя или не хочется держать distributed transaction между сервисами. Каждый шаг — локальная транзакция в своём сервисе; при сбое запускаются компенсирующие действия (бизнес-обратные операции, не rollback БД), и они должны быть идемпотентны, т.к. могут повториться. Состояния процесса должны явно отражать eventual consistency и возможные компенсации.
Что хотят услышать
- Определение саги и почему не 2PC.
- Компенсации.
- Хореография и оркестрация.
- Отсутствие изоляции.
Частые ошибки
- Думать, что компенсация — это технический rollback или точный undo (это бизнес-действие, и часто неточное).
- Забывать про идемпотентность компенсаций.
- Не проектировать промежуточные статусы процесса.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Двухфазный коммит между базами нескольких сервисов через общий координатор транзакций
- ✓Цепочка локальных транзакций с компенсирующими действиями при сбое шага
- ✗Распределённая транзакция с полной изоляцией, которую координирует брокер сообщений и откатывает целиком при ошибке
- ✗Шаблон повторов вызова с экспоненциальной отсрочкой, пока сервис не ответит успехом
Что спросят дальше
- Чем choreography отличается от orchestration?
- Когда saga хуже простой монолитной транзакции?
Разбор темы
- Saga, CDC и event-driven consistency
Почему 2PC не подходит, сага и компенсации, хореография vs оркестрация, CDC и outbox-relay, eventual consistency и границы.
Связанные вопросы
- Чем хореография саги отличается от оркестрации и когда что выбирают? Senior
- Почему компенсацию в саге называют бизнес-действием, а не откатом транзакции? Senior
- Что такое сага в контексте микросервисов? Junior
- Почему для надёжной публикации события после изменения данных применяют transactional outbox, а не двухфазный коммит? Senior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.