модуль 3 из 6 · Акт III · ~30 мин · 7 решений

сцена

Три часа ночи. Иван не спит — в переговорке горит свет, на столе остывший кофе, и рядом с Мариной сидит человек, которого он раньше не видел: юрист.

Марина
Марина

Два инцидента за вечер, оба — про деньги. Тимур, покажи.

Тимур
Тимур

Первый: покупателю дважды списали за один и тот же заказ. Он нажал «оплатить», ответ подвис, приложение повторило запрос — и ушли два платежа. Второй хуже: из трёх фермеров с минусом у одного — целых четыре тысячи. Он одновременно вывел деньги в приложении и на сайте; обе операции проверили «баланс хватает» и обе прошли.

Гена
Гена

А вот в старом монолите такого не было. Одна база, одна транзакция вокруг всего — и хоть ты тресни, дважды не спишешь.

Иван
Иван

(медленно) Почти, Гена. Гонка могла случиться и в монолите — просто «одна транзакция вокруг всего» её накрывала, и мы жили, не зная. Теперь платежи — отдельный сервис, данные разъехались по шардам, и та самая транзакция больше ничего не накрывает. Мы не завели новую болезнь — распил лишь снял с неё одеяло.

Марина
Марина

Юрист говорит, второй случай — это уже не бага, это к нам вопросы. К утру мне нужно понимать: почему так вышло и как сделать, чтобы не повторилось. Не «добавили ретраев» — а по-настоящему.

Иван открывает блокнот. На чистой странице выводит два слова: «двойное» и «минус». За ними, он уже чувствует, прячутся две совершенно разные истории.

две денежные аварии · один вечер
оплата ×2вывод ×2покупательнажал «оплатить» дваждыфермервывод в двух вкладкахплатежисервиссписано дваждыбаланс ушёл в минус

Один сервис, две ошибки — и причины у них разные. Начнём с той, что попроще.

← карта