Подтвердить что ты не робот

Эрланг: Кто руководит супервизором?

Во всех примерах супервайзера Erlang, которые я видел еще, обычно есть "главный" супервайзер, который контролирует все дерево (или, по крайней мере, является корневым node в дереве супервизора). Что делать, если "хозяин" -сервизор ломается? Как следует контролировать "хозяина"? любой типичный шаблон?

4b9b3361

Ответ 1

Верхний диспетчер запускается в вашем запуске приложения /2 обратного вызова с использованием start_link, это означает, что он связывается с процессом приложения. Если прикладной процесс получает сигнал выхода от верхнего диспетчера, который умирает, он выполняет одну из двух задач:

  • Если приложение запускается как постоянное приложение, весь node я завершается (и, возможно, перезапускается с использованием HEART).

  • Если приложение запущено как временное, приложение перестает работать, попытки перезапуска не будут выполняться.

Ответ 2

Обычно диспетчер настроен на "только" контроль над другими процессами. У какого мужчины нет пользовательского кода, который выполняется Supervisor, поэтому он вряд ли сбой.

Конечно, это не может быть принудительно... Так что типичный шаблон для не имеет какую-либо конкретную прикладную логику в Supervisor... Он должен только контролировать - и ничего не делать.

Ответ 3

Хороший вопрос. Я должен согласиться с тем, что все примеры и руководства в основном игнорируют эту проблему - даже если кто-то упоминает проблему (без предоставления примерного решения):

Если вам нужна надежность, используйте как минимум два компьютера, а затем заставляйте их контролировать друг друга. Однако на самом деле реализовать это с помощью OTP (с текущим состоянием документации и учебников), похоже, находится где-то между хорошо скрытым и секретным.