Что такое Saga и Transactional Outbox? Зачем нужны распределённые транзакции?

Saga — это паттерн для управления распределёнными транзакциями, разбивающий большую транзакцию на последовательность локальных транзакций, каждая из которых имеет компенсационное действие на случай ошибки.

Короткий ответ

Что ответить на собеседовании

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

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

Ответ с пояснениями

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

Transactional Outbox — это паттерн, при котором изменения состояния и сообщения для других сервисов записываются в одну транзакцию в базу данных (в "аутбокс" таблицу). Затем отдельный процесс читает эти сообщения и отправляет их в очередь или шину событий. Это гарантирует, что сообщения не потеряются и будут отправлены только после успешного изменения состояния.

Распределённые транзакции нужны, когда операция затрагивает несколько сервисов или баз данных, и требуется обеспечить согласованность данных между ними. Однако классические распределённые транзакции (например, двухфазный коммит) сложны и плохо масштабируются, поэтому используются паттерны вроде Saga и Transactional Outbox для обеспечения надёжности и согласованности без блокировок.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее