ну ты еще скажи, что где-то можно в транзакцию запихать отправку почты, и это нормально сработает. то есть, да, можно взять координатор транзакций между очередью и базой, или положить очередь в базу, но оба вариант работают по-разному плохо.
ну кстати согласен. У нас просто есть негласное правило с такими операциями - просто не думать о том что будет если почта отправится, а юзер не будет создан. В исключительных случаях об этом в лог напишут
ну кстати согласен. У нас просто есть негласное правило с такими операциями - просто не думать о том что будет если почта отправится, а юзер не будет создан. В исключительных случаях об этом в лог напишут
так ведь остановить на моменте, когда юзер не создался, и не отправлять письмо
ну ты еще скажи, что где-то можно в транзакцию запихать отправку почты, и это нормально сработает. то есть, да, можно взять координатор транзакций между очередью и базой, или положить очередь в базу, но оба вариант работают по-разному плохо.
Можно делать двухфазный коммит для таких вещей Простой как палка паттерн, а ещё учитывая что это в рамках одной системы делается, то локальных решений вообще нет
та письма это надуманный пример, я больше про то что есть внешние инструменты с которыми ничего из своего кода сделать не выйдет. И на это все просто забивают
та письма это надуманный пример, я больше про то что есть внешние инструменты с которыми ничего из своего кода сделать не выйдет. И на это все просто забивают
Ну хз, тут логика такова
Если ты обращаешься в стороннюю систему, то тебе либо важен результат обращения, либо нет
Если не важен, то двухфазный коммит Если важен, то эту операцию хотелось бы уметь отменять
Если ты не умеешь отменять эту операцию, то это не должно быть в транзакции
Можно делать двухфазный коммит для таких вещей Простой как палка паттерн, а ещё учитывая что это в рамках одной системы делается, то локальных решений вообще нет
да, можно, много всяких воркэраундов - 2pc, 3pc, саги. ну и конечно, везде свои дырки и всё по-своему плохо. саги в принципе лучше всего, но их еще пойди напиши нормально.
да, можно, много всяких воркэраундов - 2pc, 3pc, саги. ну и конечно, везде свои дырки и всё по-своему плохо. саги в принципе лучше всего, но их еще пойди напиши нормально.
Саги удобные в рамках нераспределённой системы. В распределённой системе это очень душный и тяжелый паттерн, потому что не понятно как такую транзакцию контроллировать, что делать если кто-то на роллбэке упал в середине цепи, всё работает синхронно
Саги удобные в рамках нераспределённой системы. В распределённой системе это очень душный и тяжелый паттерн, потому что не понятно как такую транзакцию контроллировать, что делать если кто-то на роллбэке упал в середине цепи, всё работает синхронно
так 2pc точно так же, если кто-то упал на коммите - всё, привет, разгребаем руками.
это когда интерфейс участника не begin/commit, а do/rollback, соответственно координатор по очереди дергает do, и если один из них упал - для всех предыдущих делает rollback.
Есть транзакция из трёх этапов (назову их 1 2 3) Сначала выполняется 1, потом 2, потом 3 Если выполнился 1, а потом 2, но 3 упал, то откатывается 2, а потом откатывается 1