Прочитал на хабре статью о транзакциях между микросервисами.
https://habr.com/ru/company/piter/blog/522366/
Ну, как обычно и бывает, много написано, как должны работать эти все великолепные технологии, а по сути, если вдумываться, то понимаешь, что ничего в реальности работать и не должно. Получилась статья "мы вам все доказали, что оно гарантированно работает!", а по факту в статье ничего не доказано, что оно вообще работает. По-крайней мере, я ничего не понял.
Там говорится, что есть 2 варианта распределенных транзакций: 1) двухфазная фиксация и 2) SAGA.
Так вот, насчет первой, как понял: 2 микросервиса по команде координатора выполняют BIGIN TRANSACTION и сразу же затем UPDATE/INSERT/DELETE в БД , если все успешно, то отдают координатору ответ, что все ОК. Когда координатор получает от обоих микросервисов ответ, что все ОК, то он обоим отправляет команду COMMIT. И в статье говорится, что якобы происходит коммит в обоих микросервисах и, все данные согласованы и все становится зашибись. Ну так а где кейс, когда COMMIT дошел только до одного из микросервисов, и не дошел до другого (обрыв сети, например)? Очевидно же, что в этом случае коммит случится только в 1 сервис, а в другой нет, в итоге данные будут не согласованы. Как это вообще работать по факту должно? Ничего в статье не описано.
Второй вариант - SAGA - там вообще муть. Якобы сервисы обмениваются событиями через шину сообщений с координатором, если оба сервиса успешно выполнили UPDATE/INSERT/DELETE, то они отдают событие OK , если нет, то FAILED, и якобы если координатору пришел ОК от первого сервиса и FAILED от второго, то координатор отправил событие ROLLBACK первому сервису. И якобы опять на бумаге получается, что все идеально, четко, гарантированно! ДА с чего вдруг? А если до шины твое событие ROLLBACK не дошло (обрыв сети или еще что), тогда что?
Я понимаю, как работают транзакции внутри одной БД, я читал про алгоритм в механизме транзакций, поэтому понимаю, что внутри одной БД это реализуемо. И когда пытаюсь понять, как оно реализуется на уровне нескольких распределенных БД, то попадаю на подобные статьи, в которых одна только муть под видом научной литературы.
В общем, немного бомбануло. Но, может, кто-то все же по-нормальному объяснит принцип, каким образом гарантируется ACID в распределенных транзакциях?