Задать вопрос
  • Как избежать race condition при переводе денег?

    @frosterdam
    Есть ещё вариант, помимо предложенных ранее. Немного экзотический. Но имеет место быть, т.к. сам лично столкнулся с ним, используя вендорское ПО.

    Это состояние трансфера в каждый момент времени. Грубо говоря, когда создаётся трансфер, то сразу генерируется запись (в отдельной табличке, например) со статусом это трансфера, например, CREATED. Когда выполняется какое-либо действие, то состояние изменяется (изменяется именно поле статус в записи), например, на LOCKED. И если оно LOCKED, то никакие действия с этим трансфером сделать нельзя. Если же трансфер выполнен успешно, то статус переходит в, например, APPROVED или ACCEPTED. А если в ходе трансфера были ошибки, то он переходит в статус, например, DECLINED.

    Как показала практика, то такого решения хватает в 99% случаях.
    Ответ написан
    Комментировать