tgoop.com/java_fillthegaps/574
Last Update:
Распределенные транзакции
Кукусики, спасибо за огоньки к прошлому посту! Очень приятно, вижу, что цените качественный контент🥰
А теперь к делу. В посте про сагу мы сформулировали, что она нужна для распределенных транзакций. Если на собесе упоминается термин “распределенная транзакция”, грех не спросить, что же это такое.
Удивительно, но на этом шаге многие сыпятся🤷
Транзакция — очень многозначительное понятие в айтишке, но первое, что приходит на ум — транзакции в базе данных.
Соответственно, распределённая транзакция — набор изменений в нескольких БД, которые выполняются атомарно. В любой момент времени система находится в согласованном состоянии.
— И как это, хорошо или плохо? — спрашивают вас
Чувствуете подвох, но пока не понимаете где:
— Да нормально вроде…
Интервьюер понимает, что вы опасны для проекта и ставит жирный минус.
❓ Что не так с распределенными транзакциями в БД?
Во-первых, медленно работают. Во-вторых, часто являются признаком косяков в архитектуре.
Каждый сервис выполняет задачи определенного типа. Сервис заказов работает с заказами, сервис логистики — с маршрутами и тд. Все нужные сервису данные обычно лежат в одной БД.
🚩 Распределённая транзакция в БД — это обычно знак, что мы неверно распределили функции по сервисам.
Второе значение слова транзакция — набор изменений, которые происходят атомарно. Либо все завершатся успешно либо ни одно.
Тут нет отсылок на БД, нет требования одновременности и согласованности в каждый момент времени. И это уже нормальный вариант для жизни. Если что-то пошло не так, делаем ретрай или потихоньку откатываем изменения.
Ещё раз подсвечу разницу.
🛢️ Распределённая транзакция в БД:
▫️ Данные в системе согласованы в каждый момент времени
▫️ Гарантия распространяется только на изменения в БД
▫️ Сложно и долго
▫️ Признак плохой архитектуры
🎩 Распределённая транзакция бизнес-процесса:
▫️ Eventual consistency. Однажды всё станет хорошо, но в процессе возможны несогласованные данные
▫️ Можно менять состояние не только в БД, но и в других сервисах, файлах, отправлять сообщения в месседж брокер
▫️ Не требует сложных блокировок
Термин один, а значения абсолютно разные! Обидно, когда кандидат их путает и предлагает масштабно блокировать систему, где это не требуется.
BY Java: fill the gaps
Share with your friend now:
tgoop.com/java_fillthegaps/574