Следующее решение проблемы consumer'ов
✳️Интеллектуальный Retry с экспоненциальной задержкой
Со словом ретрай все понятно - повторы запросов.
А вот с экспоненциальностью разберемся. Действуем от обратного. Простой ретрай с фиксированным повтором (каждые N секунд):
⚛️ Не дает системе восстановиться
⚛️ Создает искусственную нагрузку
⚛️ Не учитывает природу ошибки
Лучше использовать увеличиваемая задержка + случайная добавка
⏺️ Категоризация ошибок: временные vs постоянные. Если временные (моргает сеть), то увеличиваем время ожидания между попытками. Если ошибка постоянная, то сразу отправляем в очередь dead
⏺️ Экспоненциальная задержка: 1s → 2s → 4s → 8s → 16s. позволяет не делать лавину запросов сразу после того,как сервис заработал.
⏺️ Случайная добавка: предотвращает синхронизацию множества consumer'ов, которые сразу набросятся со своими сообщениями, как только сервис восстановится. С добавкой поступление сообщение будет чутьболее равномерным.
⏺️ Максимальный лимит попыток: обычно 3-8 в зависимости от бизнес-логики
Post #140
102
- 👍 1