ledger
Сервис двойной записи на FastAPI, PostgreSQL и Kafka. Здесь его гарантии можно проверить руками: эксперименты ниже выполняются на живом сервисе, с настоящими блокировками и настоящим брокером.
Тысяча переводов со ста рублей
Открывается счёт со 100.00, и с него одновременно уходит 1000 переводов по 1.00 (по 16 в полёте). Правильный ответ — 100 прошло, 900 отказов. Выберите, как журнал удерживает списание.
| Счёт | Баланс | Сумма проводок | Сверка |
|---|
Пятьдесят одинаковых запросов
Один и тот же перевод 10.00 с одним и тем же Idempotency-Key отправляется
50 раз одновременно — так ведёт себя клиент, который повторяет запрос по таймауту.
Перевод должен пройти один раз.
Попробовать руками
Обычные запросы к API. Повтор перевода с тем же ключом вернёт сохранённый ответ
с заголовком Idempotent-Replayed: true, а не переведёт ещё раз.
| Счёт | Баланс |
|---|
Уведомления
Проводка пишет событие в outbox в той же транзакции; релей публикует его в Kafka, консьюмер записывает уведомление. Задержка — от коммита проводки до записи уведомления, по часам сервера.
| Операция | Сумма | Баланс после | Задержка |
|---|