ledger

Сервис двойной записи на FastAPI, PostgreSQL и Kafka. Здесь его гарантии можно проверить руками: эксперименты ниже выполняются на живом сервисе, с настоящими блокировками и настоящим брокером.

Тысяча переводов со ста рублей

Открывается счёт со 100.00, и с него одновременно уходит 1000 переводов по 1.00 (по 16 в полёте). Правильный ответ — 100 прошло, 900 отказов. Выберите, как журнал удерживает списание.

Пятьдесят одинаковых запросов

Один и тот же перевод 10.00 с одним и тем же Idempotency-Key отправляется 50 раз одновременно — так ведёт себя клиент, который повторяет запрос по таймауту. Перевод должен пройти один раз.

Попробовать руками

Обычные запросы к API. Повтор перевода с тем же ключом вернёт сохранённый ответ с заголовком Idempotent-Replayed: true, а не переведёт ещё раз.

Счета
СчётБаланс

Уведомления

Проводка пишет событие в outbox в той же транзакции; релей публикует его в Kafka, консьюмер записывает уведомление. Задержка — от коммита проводки до записи уведомления, по часам сервера.

обновляется раз в секунду
ОперацияСуммаБаланс послеЗадержка