IOSOR База знань

Інцидент з API: відсутність ідемпотентності — це заморозка, а не шторм ретраїв

Як пережити перший збій API на white-label prepaid CPaaS без циклів повторів та пошкодження балансів клієнтів.

Обрив зв'язку часто змушує клієнтські мікросервіси безкінечно дублювати запити на відправку SMS. Без надійної ідемпотентності такий шторм ретраїв швидко спустошить передплачені баланси користувачів через подвійні списання. Дізнайтеся, як впровадити транзакційні блокування для захисту фінансів у вашій CPaaS-системі.

Нічний алерт та повна тиша в каналах зв'язку

Моніторинг сигналізує про падіння доставки DLR на фоні аномального росту вхідного SMS-трафіку. Обрив зв'язку на магістралі розірвав пакет посеред сесії, а клієнтський сервіс інтерпретував це як помилку. Без захисних механізмів автоматика починає бомбити шлюз ідентичними запитами. Це типовий шторм повторів у препейд-системі, де кожен дубль створює ризик подвійного списання коштів з балансу. У моделі white-label prepaid CPaaS перший реальний інцидент вимагає насамперед захисту фінансів клієнтів від каскадних збоїв мережі.

Чому повторні виклики без лімітів виснажують рахунки

У разі таймауту проста логіка додатків одразу повторює HTTP-запит. Якщо шлюз обробляє такі дублі як нові транзакції, кожен виклик ініціює чергове виділення JIT-номера чи відправку повідомлень. Це руйнує правило препейд-мінімуму USD 20, заганяючи рахунки в мінус раніше, ніж спрацює захист від ризиків. Зверніться до нашого посібника про Другий місяць API: борг ідемпотентності після першого циклу — вибачте, переплутав посилання — про ідемпотентність, 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. Статус тікета — не грошовий статус.

Чи був матеріал корисним?

Пов’язані гіди