Size: a a a

2021 January 11

((

(fun () -> ()) in pro.elixir
Alex Bubnov
ну ты еще скажи, что где-то можно в транзакцию запихать отправку почты, и это нормально сработает.
то есть, да, можно взять координатор транзакций между очередью и базой, или положить очередь в базу, но оба вариант работают по-разному плохо.
ну кстати согласен. У нас просто есть негласное правило с такими операциями - просто не думать о том что будет если почта отправится, а юзер не будет создан. В исключительных случаях об этом в лог напишут
источник

T

Tharin in pro.elixir
(fun () -> ())
ну кстати согласен. У нас просто есть негласное правило с такими операциями - просто не думать о том что будет если почта отправится, а юзер не будет создан. В исключительных случаях об этом в лог напишут
так ведь остановить на моменте, когда юзер не создался, и не отправлять письмо
источник

T

Tharin in pro.elixir
о_О
источник

T

Tharin in pro.elixir
сначала создать пользователя, а потом отправить почту
источник

T

Tharin in pro.elixir
это не рокетсайенс же
источник

AI

Alexis IV Mobius in pro.elixir
очевидно, надо просто отправлять второе письмо с инструкцией игнорировать предыдущее :)
источник

AB

Alex Bubnov in pro.elixir
Tharin
так ведь остановить на моменте, когда юзер не создался, и не отправлять письмо
я думаю, стоит сойтись на том, что это ОЧЕНЬ плохой пример
источник

AB

Alex Bubnov in pro.elixir
и не надо его рассматривать всерьез
источник

T

Tharin in pro.elixir
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
ну ты еще скажи, что где-то можно в транзакцию запихать отправку почты, и это нормально сработает.
то есть, да, можно взять координатор транзакций между очередью и базой, или положить очередь в базу, но оба вариант работают по-разному плохо.
Можно делать двухфазный коммит для таких вещей
Простой как палка паттерн, а ещё учитывая что это в рамках одной системы делается, то локальных решений вообще нет
источник

((

(fun () -> ()) in pro.elixir
та письма это надуманный пример, я больше про то что есть внешние инструменты с которыми ничего из своего кода сделать не выйдет. И на это все просто забивают
источник

LL

Lama Lover in pro.elixir
(fun () -> ())
та письма это надуманный пример, я больше про то что есть внешние инструменты с которыми ничего из своего кода сделать не выйдет. И на это все просто забивают
Ну хз, тут логика такова

Если ты обращаешься в стороннюю систему, то тебе либо важен результат обращения, либо нет

Если не важен, то двухфазный коммит
Если важен, то эту операцию хотелось бы уметь отменять

Если ты не умеешь отменять эту операцию, то это не должно быть в транзакции
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Можно делать двухфазный коммит для таких вещей
Простой как палка паттерн, а ещё учитывая что это в рамках одной системы делается, то локальных решений вообще нет
да, можно, много всяких воркэраундов - 2pc, 3pc, саги. ну и конечно, везде свои дырки и всё по-своему плохо.
саги в принципе лучше всего, но их еще пойди напиши нормально.
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
да, можно, много всяких воркэраундов - 2pc, 3pc, саги. ну и конечно, везде свои дырки и всё по-своему плохо.
саги в принципе лучше всего, но их еще пойди напиши нормально.
Саги удобные в рамках нераспределённой системы. В распределённой системе это очень душный и тяжелый паттерн, потому что не понятно как такую транзакцию контроллировать, что делать если кто-то на роллбэке упал в середине цепи, всё работает синхронно
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Саги удобные в рамках нераспределённой системы. В распределённой системе это очень душный и тяжелый паттерн, потому что не понятно как такую транзакцию контроллировать, что делать если кто-то на роллбэке упал в середине цепи, всё работает синхронно
так 2pc точно так же, если кто-то упал на коммите - всё, привет, разгребаем руками.
источник

AI

Alexis IV Mobius in pro.elixir
что такое саги, расскажите тупому
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
так 2pc точно так же, если кто-то упал на коммите - всё, привет, разгребаем руками.
У меня в 100% случаев локальное решение это роллбек
Иначе, это получается рулетка
источник

LL

Lama Lover in pro.elixir
Использова не роллбек в локальном решении имеет смысл только в сетях, где нет даже гарантии at least once доставки
источник

AB

Alex Bubnov in pro.elixir
Alexis IV Mobius
что такое саги, расскажите тупому
это когда интерфейс участника не begin/commit, а do/rollback, соответственно координатор по очереди дергает do, и если один из них упал - для всех предыдущих делает rollback.
источник

LL

Lama Lover in pro.elixir
Alexis IV Mobius
что такое саги, расскажите тупому
Есть транзакция из трёх этапов (назову их 1 2 3)
Сначала выполняется 1, потом 2, потом 3
Если выполнился 1, а потом 2, но 3 упал, то откатывается 2, а потом откатывается 1
источник