Здравствуйте, gandjustas, Вы писали:
G>Чтобы говорить об одном и том же давай зафиксируем детали о которых шла речь: G>- Я предлагаю состояние заказа менять в одной транзакции с обновлением остатков. Заказы и остатки естественно должны быть в одной базе G>- МСА предлагает сделать две базы, где заказы лежат в одной, а заказы в другой. G>Написать код вида: G> 1. обнови остатки в базе А G> 2. обнови статус заказа в базе Б G> 3. если появилась ошибка, то откати обновление в базе А
G>Если код падает по между шагами 2 и 3, то в базе остается несогласованное состояние. G>Значит вместе самим кодом резервирования заказа надо написать еще фоновую задачу, которая откатывает незавершенные резервы.
Ты упускаешь мою мысль, что этот код — не особенность МСА-реализации, а реальность бизнес-задачи. Просто в твоём монолитном решении ты игнорируешь эту проблему. С точки зрения бизнеса _изначальная_ задача выглядит так:
1. Пользователь создаёт заказ
2. Склад резервирует заказ
3. Пользователь завершает заказ
И вот когда ты опишешь задачу так, то совершенно ВНЕЗАПНО получается, что "надо написать еще фоновую задачу, которая откатывает незавершенные резервы" в любом случае, неважно — МСА у тебя или монолит.
МСА просто это сделал явным.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай