Транзакция не исключает lost update, write skew, дедлоки и повторное применение одного платежа. Безусловная запись баланса, вычисленного до блокировки, может затереть параллельное изменение.
Какие ошибки и проблемы могут возникнуть при обновлении баланса даже после оборачивания операций в транзакцию?
Транзакция не исключает lost update, write skew, дедлоки и повторное применение одного платежа. Безусловная запись баланса, вычисленного до блокировки, может затереть параллельное изменение.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Транзакция не исключает lost update, write skew, дедлоки и повторное применение одного платежа. Безусловная запись баланса, вычисленного до блокировки, может затереть параллельное изменение.
Используйте атомарное изменение, проверку достаточности средств, row lock либо optimistic version check. Счета блокируйте в стабильном порядке, при serialization failure повторяйте всю операцию с ограничением попыток. Idempotency key защищает от повторов клиента, а уникальные записи журнала — от двойного эффекта. Денежную сумму представляйте точно; внешние вызовы и письма не становятся атомарными вместе с DB-транзакцией.