Эрланг: Кто контролирует руководителя? - PullRequest
11 голосов
/ 18 апреля 2011

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

Ответы [ 3 ]

12 голосов
/ 18 апреля 2011

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

  1. Если приложение запускается как постоянное приложение, весь узел я завершил (и, возможно, перезапустил).используя СЕРДЦЕ).

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

4 голосов
/ 18 апреля 2011

Обычно Supervisor настроен на «только» наблюдение за другими процессами.У кого нет никакого написанного пользователем кода, который выполняется Supervisor - так что очень маловероятно, что он потерпит крах.

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

3 голосов
/ 18 апреля 2011

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

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

...