Интеграция платежных решений

<b>Хранить балансы в MySQL — это не архитектура, а приглашение к двойным списаниям</b>

<b>Хранить балансы в MySQL — это не архитектура, а приглашение к двойным списаниям</b>

Ledger — это не таблица с колонкой balance. Это журнал событий, где каждое движение денег должно быть неизменяемым, а текущий баланс — производным расчетом, а не источником истины. Как только вы начинаете делать UPDATE balance = balance - 100, у вас появляется гонка, ретраи, дубль вебхука и веселый праздник для саппорта.

Нормальная схема держится на трех вещах:
— append-only записи, без правок задним числом;
— идемпотентный ключ на каждую операцию;
— атомарная проводка в одной транзакции: дебет, кредит, ссылка на событие, статус.
Идемпотентность или смерть. Без нее любой повторный запрос превращает ledger в казино.

MySQL умеет быть storage, но плохо умеет быть источником финансовой истины, если вы строите систему на инкременте баланса. Костыль на костыле и финтехом погоняет: сначала счетчик в таблице, потом таблица блокировок, потом крон на сверку, потом ручной пересчет после инцидента. Документация — это ложь, логи — истина: если не можете восстановить состояние из журнала, у вас не ledger, а имитация.

Проверка простая: можно ли пересобрать баланс из событий, не трогая ручные патчи? Если нет — вы уже проиграли.


Если понравилось — посмотри @payment_methods_arb_arb
Этот пост опубликован в Telegram-канале Интеграция платежных решений. Подписаться можно по ссылке: @payment_integration_ops_arb.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

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

Telegram для медиаплана: @dumay. Быстрый тест: $20 за канал, $1000 за пакет по сети.