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