Я понимаю где сломана система ещё до того как открыл код.
Заказчик рассказывает. Я слушаю не задачу. Я слушаю где сэкономили. Где не следили за разработкой. Где при проектировании системы не задавали вопрос "а что если". "А что если два запроса придут одновременно?" Не задали. Получили гонку на балансах. "А что если провайдер пришлёт событие дважды?" Не задали. Получили двойные зачисления. "А что если документ уйдёт до того как транзакция закрылась?" Не задали. Клиент отказался платить по счёту. 8 миллионов рублей в месяц на пересылках. Никто не считал. Каждый раз одна и та же история. Система строилась чтобы работать в идеальных условиях. Никто не проектировал что происходит когда условия не идеальные. Моя работа начинается не с кода. Она начинается с вопроса который никто не задал.
· 14.05
Очень интересный пост, подскажи пожалуйста как ты решал проблему с гонкой запросов? А проблему с событиями решали с помощью обеспечения механизма идемпотентности? Буду благодарен за ответ!
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 15.05
Гонку решил через SELECT FOR UPDATE NOWAIT на балансах, атомарная блокировка в рамках одной транзакции. События через idempotency key в той же транзакции, что и изменение баланса. Unique constraint на уровне БД. Никакого Redis, атомарность только внутри одного хранилища.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 15.05
Спасибо за подробный коммент, очень ценно!
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён