Re: [Erlang] логика рестарта в супервизоре
От: Mikl Kurkov Россия  
Дата: 12.02.09 09:36
Оценка: 10 (2)
Здравствуйте, netch80, Вы писали:

N>...

N>это приводит в тяжёлом случае к тому, что дохнет всё приложение, если оно сделано традиционно как "xxx_app:start() запускает xxx_sup".
N>Хочется же видеть логику стиля юниксового init(8): если рестарт был слишком часто (причём считается по каждому ребёнку отдельно!) — прекращаем стартовать его на некоторое время, но не дохнем.

N>А ещё лучше — в callback module описать хук с выбором между вариантами в зависимости от чего-то, известного этому модулю.


N>Кто-нибудь видел такие реализации? Непонятно, по каким словам гуглить.


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

Другой вариант, если нужны более замысловатые стратегии рестарта — реализовать свой супервизор,
пример — Timed supervisor for scheduled process execution

--
Mikl
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.