IOSOR База знаний

Инцидент с API: отсутствие идемпотентности ведет к заморозке, а не к шторму ретраев

Разбор первого крупного сбоя в white-label prepaid CPaaS: как остановить цикл повторных запросов и защитить балансы.

Сбои в сети часто заставляют клиентские сервисы повторно отправлять запросы, считая их утерянными. В системах prepaid CPaaS такие дубли грозят мгновенным двойным списанием средств с баланса пользователя. Внедрение строгой идемпотентности на уровне API-шлюза позволяет надежно защитить кошельки клиентов от подобных потерь.

Ночной алерт и тишина на линии

Дашборд показывает провал доставки DLR на фоне резкого скаска входящего SMS-трафика. Разрыв соединения на транзитном узле оборвал пакеты посередине запроса, и клиентский сервис решил, что операция провалилась. Без должной защиты автоматизированные клиенты начинают бомбардировать шлюз одинаковыми payload. Вы столкнулись с классическим штормом повторов на предоплатном балансе, где каждый дубль угрожает двойным списанием средств. В архитектуре white-label prepaid CPaaS первый серьезный сбой учит главному: защищать кошельки клиентов от последствий сетевых сбоев важнее, чем просто поднимать упавшие сервисы.

Почему повторы без защиты опустошают баланс

При таймауте наивная бизнес-логика немедленно повторяет HTTP-запрос. Если маршрутизатор обрабатывает дубли как независимые транзакции, каждый вызов запускает новое выделение JIT-номера или отправку сообщений. Это нарушает логику минимального депозита USD 20, опуская счета в минус до того, как риск-модуль успеет отреагировать. Изучите материалы про идемпотентность, retry и деньги, чтобы понять механику блокировки транзакций и предотвратить случайное обнуление кошельков при обрывах связи.

Локализация сбоя и экстренная остановка потока

Ваш приоритет — остановить входящий поток до правки кода. Внедрите временное правило лимитирования на шлюзе API, отсекающее идентичные запросы в узком временном окне. Не пытайтесь проводить транзакции в условиях несогласованного состояния базы данных. Если объем спорного трафика приближается к порогу soft review near USD 1,000/month, апстрим-провайдеры могут заблокировать ваш мерчант за подозрительную активность. Заморозьте проблемный эндпоинт клиента через панель управления немедленно.

Проверка состояния транзакций и консистентность баланса

После затишья шторма необходим полный аудит всех изменений баланса за время инцидента. Сопоставьте логи внутреннего реестра с сигналами HB от операторов связи, чтобы выявить сирота-запросы, где SMS ушло, но DLR не записался. Разработчики часто накапливают Второй месяц API: долг по идемпотентности после первого цикла, полагаясь на базовые блокировки базы данных. Этого недостаточно. Распределенные микросервисы требуют хэш-блокировок запросов для гарантии уникальности выполнения операций.

Защита вебхуков от зеркальных повторов

Безопасная обработка входящих вебхуков важна так же, как и контроль исходящих вызовов. Клиенты, получающие асинхронные DLR, могут зациклиться, если ваш сервер отвечает ошибкой 5xx из-за конкуренции за блокировки БД. Внедрите жесткую проверку подпись webhook и окно replay с использованием криптографических меток времени, отклоняя устаревшие пакеты. Это избавит ваши системы от лавины повторных уведомлений.

Начните работу с IOSOR

На неделе инцидента сначала заморозьте новый исходящий. Добавьте Idempotency-Key на каждый inflight send, выгрузите дубли debit и остановите тихие клиентские retry. Не открывайте шторм повторов, чтобы «догнать».

Итог IOSOR

Делайте: отсутствие ключей — это freeze, затем backfill и сверка ledger.

Не делайте: закрывать инцидент, пока дубли DLR ещё чеканят второй debit. Статус тикета — не денежный статус.

Был ли материал полезен?

Связанные гайды