Re: Логика повторов при ошибке...
От: Буравчик Россия  
Дата: 04.12.22 12:19
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Но вот как лучше делать повторы на практике? Можно ли придумать некое универсальное настраиваемое решение? Что используете вы?


Такие решения давно придуманы. Полиси ретраев (количество и периодичность) в нормальных библиотеках выделены в отдельный классы (или функции). В библиотеке есть готовые классы — для постоянного времени между ретраями, для экспоненциального, и т.п. При желании — можно легко написать свой класс для кастомной логики. Open-closed Principe в действии

Мы используется экспоненциальный, до некоторого периода. Потом сбой, или постоянные редкие ретраи. Плюс джиттер
Best regards, Буравчик
Re[6]: Логика повторов при ошибке...
От: wildwind Россия  
Дата: 08.12.22 10:35
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот именно что пару дней. Но зачем год долбить?


Сценарии разные бывают. Ты просто не можешь держать в голове все. Например, трекер в авто. Или космический аппарат.

Кстати, в таких сценариях экспонента дает еще экономию ценной энергии.
Re[3]: Логика повторов при ошибке...
От: maxkar  
Дата: 11.12.22 12:55
Оценка: 88 (2)
Здравствуйте, Sinclair, Вы писали:
S>Вот мне, кстати, всегда было непонятно, почему нужно именно экспоненциальное время задержки. Почему не арктангенс или кусочно-линейное? Ну, типа попробовали ежеминутно-через 5 минут — через полчаса — через час — и долбим раз в час.
Конкретные сценарии и ограничение сверху зависят от системы. А цель — избежать того, что называется "dogpile" — различия в нагрузках на различных этапах (например, при старте сервера и в процессе нормальной работы). (Я сейчас по Release It, second edition, pp. 78-80 привожу).

Допустим, сервис А вызывает сервис Б. В какой-то момент сервис Б не выдержал нагрузки и ушел в дикие задержки. Некоторые экземпляры упали, некоторые нет. Часа через три проснулись разработчики и операторы сервиса Б и попробовали его починить. Только есть проблема — ваш сервис А к этому моменту дает четырехкратную нагрузку на сервис Б! Четырехктратная — это обычная нагрузка плюс повторы операций за три часа, которые сервис лежал. При этом при старте сервис может требовать больше ресурсов — кэши не заполнены, код не проджитен. Он уже при нормальной нагрузке упал, а тут — четырехкратная (и возрастающая, так как текущую нагрузку он облуживать еще не может).

Экспонента позволяет избежать такого "умножения" нагрузки. При этом активно используется и рандомизация — чтобы пришедшая за короткое время волна тоже размазывалась (в диапазоне, допускаемом "экспонентой"). Без рандомизации волна будет повторяться и может приводить к повторным отказам. А с рандомизацией она будет увеличиваться в длине но уменьшаться в высоте (при условии, что остальная нагрузка не пиковая).

Если у вас запросы раз в минуту — можно делать любое время задержки. А вот при сотнях-тысячах запросов в минуту все эти тонкости становятся уже важны. Они позволяют ограничить масштабы проблемы и в дальнейшем быстрее вернуться в рабочий режим. Если интересует тема надежности, рекомендую вышеупомянутую Release It — легко читается, содержит как примеры реальных отказов систем, так и практические советы о том, как избежать проблем.
Re: Логика повторов при ошибке...
От: · Великобритания  
Дата: 11.12.22 13:16
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Но вот как лучше делать повторы на практике? Можно ли придумать некое универсальное настраиваемое решение? Что используете вы?

А зачем универсальное? Неясно зачем для этого вообще некий супер-фреймворк с трёхэтажной конфигурацией? Функциональность тривиальная — дать задержку, повторить. Три строчки кода. Не нужен для этого фреймворк.
Самое сложное в этой задаче — изучить специфику сервиса — как он ведёт себя при падении, как быстро чинится и т.п. — на этом основании придумать собственно придумать функцию, выдающую задержки, чтобы система восстанавливалась как можно быстрее и требовала минимум ручного вмешательства. А это — никак не алгоритмизуется в общем случае.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Логика повторов при ошибке...
От: MaximVK Россия  
Дата: 14.12.22 09:53
Оценка:
Здравствуйте, Shmj, Вы писали:

Ну если хочется очень заморочиться, то можно собрать статистику, придумать таргет функцию и построить оптимальную логику ретрая под таргет функцию.
Если этот процесс сделать автоматическим, то получишь адаптивный механизм.
Только, имхо, для 99.99% задач это нафиг не нужно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.