Распределенные транзакции / Что выбрать? Saga или 2pc? / Как подружить микросервисы

preview_player
Показать описание
Когда мы работаем в рамках одной базы данных - все просто. Но как быть, если партия велела перейти на микросервисы, у каждого из которых будет своя база? Что делать с транзакциями? Как спасти священный ACID? Что такое распределенные транзакции? Какие паттерны бывают? Чем паттерн Saga отличается от паттерна 2pc (двухфазного коммита)? И какой из паттернов лучше для нашей ситуации?

java 2021
Рекомендации по теме
Комментарии
Автор

Да согласен! Консистентность данных это большая головная боль разрабов. особенно где быстро надо.

ДмитрийХвастунов
Автор

Если кому интересно откуда пошло название saga, то ответ есть на стековерфлоу. Это просто от слова "сага" - как цепь взаимосвязанных событий.

dzen
Автор

Отлично объяснили тему. Огромное спасибо)

ALEKSFMF
Автор

Спасибо. Наглядно объяснил, как работает 2pc

iambusybox
Автор

А что из себя представляет процесс подготовки данных транзакции в 2pc паттерне? Какой механизм позволяет нам узнать будут данные failed или success? Если есть возможность дождаться ответа от prepare транзакций, почему мы не можем так же дождаться ответа от обычной транзакции, и в зависимости от её ответа выполнять или не выполнять следующую транзакцию?
Ответьте, пожалуйста, если найдется время)

alexeyfedorovich
Автор

Так, а что если в двухфазном комитете обе транзакции 'подготовились' успешно, но одна упала при коммите? Или с одной из бд потерялась связь? Этот вариант у вас не рассмотрен.

igorm.
Автор

Здравствуйте. Народ не подскажите где можно найти нормальный проект(Saga pattern вместе с Spring boot)? Везде объяснения, но не могу найти с кодом.

dovuddev
Автор

а если в 2pc на этапе коммита мы должны уже финально снять сумму - но снятие суммы это обращение к стороннему сервису - например апи банка и все упало - то что в этом случаи?

TheSemenFarada
Автор

тема раскрыта не полностью - что произойдет, если в 2PC одна транзакция в статусе Done, другая в статусе Failed? Как потом откатывать данные?

smilesrg
Автор

7:25 а если первый done, а второй не done (подтвердилась только 1-я транзакция) ?

test_bot
Автор

Что делать с ситуацией когда сначала выбираются данные из базы и далее на их основе вычисляется некоторая бизнес логика, которая затем сохраняется в базу. Может быть ситуация, когда первый поток уже выбрал данные из базы, затем второй поток эти данные изменил, далее произошло событие об изменении, после чего первый поток продолжает вычислять бизнес-логику уже на основе неактуальных данных. Проблема из-за отсутствия изолированности, но тут мы даже компенсацию сделать не можем, так как событие об изменении приходит раньше, чем первый поток закончит свою работу.

xfgweb
Автор

при 2pc можно блокировать не изменение значения поля, а блокировать некий неснижаемый остаток, разрешая менять его другим запросам

timur
Автор

Разве SAGA требует эвентов, и там же их две..В целом можно залочить ресурсы в базе без блокировок просто через state машину дополнитетльное поле статусов.

maksimmuruev
Автор

Спасибо за доклад.

Разве для 2PC нельзя применить вариант снятия 20 рублей с баланса пользователя на стадии prepare? Чтобы не делать блокировку баланса для других транзакций

serhii.koberniuk
Автор

12:30 - программисты пишут код в базе данных... Как это? Какой механизм позволяет использовать этот код, он же в бд?

mqtrade
Автор

А можно приболтать бизнес чтобы распределенных транзакций не было) Тот случай когда софт скилы эффективнее любого паттерна:) Но конечно не всегда такое возможно)

ДанилаФедоров-кэ
Автор

В 2pc все равно же не атомарно потому что не факт что сможем отправить аборт. Чёт не понял

alexanderlagutin
Автор

Микросервисы - модно, но порождает головную боль, монолит - классика..
Этот спор технологий разрешит прорыв в переходе к новым сетевым протоколам и новые технологии передачи данных по кабелю.. разумеется в пользу монолита

uidee
Автор

Не обманывайте людей. В патерне Saga нет транзакции. Не нужно делать подмену понятий типа сказав "локальная транзакция". Почитайте что такое транзакция. Честно было бы сказать что в Sega вы отказываетесь от транзакции и в случае не удачи, пытаетесь восстановить в обратном порядке данные, в случае не сложных систем вы будете иметь редко проблемы, а в
В 2pc есть свои нюансы, но это транзакция, в Sega ее нет, и тот кто решит это использовать должен об этом знать.

thecftyhn
Автор

В координаторе создаётся какая то транзакция)) откуда и как можно без бд сощдать транзакцию, что за фантазии.

complicated