Усі статті
19 квітня 2023 р.6 хв читання

Повторні спроби: коли вони рятують, а коли погіршують ситуацію

Автор: Команда Atflow

світлі прикраси в темній зоні
Фото: Aron Visuals на Unsplash

Повторна спроба невдалої операції — найпоширеніший патерн надійності і один з найлегших для катастрофічного застосування. Зроблена добре, тимчасова помилка зникає ще до того, як її хтось помітить. Зроблена погано, ваші власні клієнти добивають сервіс, який і так ледве тримається.

Повторюйте лише те, що можна повторити

Таймаут варто повторити; помилку 400 — ні, і ніколи не варто. Повторювати детермінований збій — це просто повільніший спосіб впасти із створенням навантаження. Перше рішення завжди таке: чи може цей клас помилок взагалі пройти з другої спроби.

Правила, які мають значення

  • Експоненційний backoff із jitter — синхронізовані повтори створюють власне стадо, що топче сервіс.
  • Жорстке обмеження кількості спроб і визначене місце призначення для того, що їх вичерпало.
  • Ідемпотентність, інакше повторна спроба спише з клієнта гроші двічі.
  • Circuit breaker, щоб перестати довбати те, що очевидно лежить.

Це рішення політики, а не деталі коду — тому їм місце там, де їх видно. Гілка повтору з написом «+72 год, макс. 3» піддається аудиту, на відміну від константи, захованої в сервісі.

НадійністьІнженеріяПовторні спроби