Шаблон повторных попыток (Retry Pattern)
(описание к предыдущему посту)
Это один из самых простых способов повысить отказоустойчивость системы. Как это работает:
1. Не выполняйте повторные попытки бесконечно
Повторные попытки имеют свою цену.
* Слишком мало попыток: вы можете сдаться при временных сбоях (например, кратковременном сетевом сбое).
* Слишком много попыток: вы перегружаете систему, увеличиваете время отклика и маскируете реальные проблемы.
Практическое правило: обычно оптимальным является 3 попытки. После этого более вероятно, что вы имеете дело с реальным сбоем, а не с временным.
2. Используйте экспоненциальную отсрочку
Время повторных попыток важнее их количества.
* Без таймата: все неудачные запросы повторяются мгновенно → увеличивается перегрузка системы.
* С экспоненциальной отсрочкой (таймаутом): время ожидания увеличивается (например, 1 с → 2 с → 4 с → 8 с), давая системам время на восстановление.
Это предотвращает превращение повторных попыток в проблему.
3. Выполняйте повторные попытки только при временных ошибках
Не каждая ошибка заслуживает повторной попытки.
* Подходящие для повтора: 408 (тайм-аут), 5xx (сервер перегружен).
* Неподходящие для повтора: 400 (неверный запрос), 403 (запрещено).
Ошибки, подлежащие повторным попыткам, носят временный характер. Ошибки, не подлежащие повторным попыткам, связаны с проблемами проектирования или данных; здесь требуется исправление, а не повторная попытка.
Если торговый автомат показывает «временно не работает», попробуйте позже. Если он говорит «вставьте 5 долларов, а не 1», повторная попытка не поможет.
4. Комбинируйте с паттерном Circuit Breaker (предохранитель)
Одни только повторные попытки могут вызвать каскадные сбои, если сервис действительно не работает. Circuit Breaker добавляет защиту:
* Отслеживает частоту сбоев.
* Открывается, когда количество сбоев превышает порог → останавливает повторные попытки на некоторое время.
* Закрывается, когда состояние улучшается.
Post #2179
1.83K
- 👍 6
- ❤ 1
- 🔥 1
- 🥰 1
- 👏 1
- 🕊 1
- 🤓 1