19 квітня 2023 р.6 хв читання
Повторні спроби: коли вони рятують, а коли погіршують ситуацію
Автор: Команда Atflow

Повторна спроба невдалої операції — найпоширеніший патерн надійності і один з найлегших для катастрофічного застосування. Зроблена добре, тимчасова помилка зникає ще до того, як її хтось помітить. Зроблена погано, ваші власні клієнти добивають сервіс, який і так ледве тримається.
Повторюйте лише те, що можна повторити
Таймаут варто повторити; помилку 400 — ні, і ніколи не варто. Повторювати детермінований збій — це просто повільніший спосіб впасти із створенням навантаження. Перше рішення завжди таке: чи може цей клас помилок взагалі пройти з другої спроби.
Правила, які мають значення
- Експоненційний backoff із jitter — синхронізовані повтори створюють власне стадо, що топче сервіс.
- Жорстке обмеження кількості спроб і визначене місце призначення для того, що їх вичерпало.
- Ідемпотентність, інакше повторна спроба спише з клієнта гроші двічі.
- Circuit breaker, щоб перестати довбати те, що очевидно лежить.
Це рішення політики, а не деталі коду — тому їм місце там, де їх видно. Гілка повтору з написом «+72 год, макс. 3» піддається аудиту, на відміну від константи, захованої в сервісі.
НадійністьІнженеріяПовторні спроби