Комментарии 7
acqure_mutex()
Про разные инстансы, микросервисы и прочую лабуду мы не слышали.
Ну-ну.
Операцию с ценой проводите в базе транзакцией.
Да ну, пример вообще дурацкий. В ордере должна быть нормальная цена и отдельным айтемом купон со скидкой, если он передан. Причем добавление купона должно быть сделано путем не допускающим двойственность, типа merge.
Спасибо за комментарий!
Нашими специалистами выполнялось «black box»-тестирование, поэтому мы достоверно не можем знать, какой именно код на стороне клиента привел к ошибке. Можно бесконечно долго раскручивать представление о том, как работает система заказчика, и в результате «переизобрести» ее у себя. Однако не в этом смысл статьи.
Мы хотим обратить внимание на проблему связанную с багами данного рода. Показать, что их нельзя недооценивать и проверять приложение на их наличие необходимо.
Нашими специалистами выполнялось «black box»-тестирование, поэтому мы достоверно не можем знать, какой именно код на стороне клиента привел к ошибке. Можно бесконечно долго раскручивать представление о том, как работает система заказчика, и в результате «переизобрести» ее у себя. Однако не в этом смысл статьи.
Мы хотим обратить внимание на проблему связанную с багами данного рода. Показать, что их нельзя недооценивать и проверять приложение на их наличие необходимо.
> Как защититься
использовать проверку с помощью моделей (model checking) для проверки алгоритмов (TLA+, Spin/Promela) и для проверки кода. Динамический анализ, например Thread Sanitizer.
использовать проверку с помощью моделей (model checking) для проверки алгоритмов (TLA+, Spin/Promela) и для проверки кода. Динамический анализ, например Thread Sanitizer.
Доходчиво объяснили полезность мьютекс объектов и как работает асинхронность, спасибо!
В конце статьи потоки зачем-то смешали с процессами. Зачем промокод вообще сделан отдельным POST запросом?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Почему стоит проверять приложения на устойчивость к race condition