Разработка приложений Erlang (как замкнуть накоротко) - PullRequest
2 голосов
/ 02 мая 2019

У меня есть экзистенциальный вопрос о том, как я проектирую свои приложения Erlang:

Я обычно создаю приложение, которое запускает супервизор и некоторых работников. Помимо дерева наблюдения, у меня есть модули с функциями (дух). У меня также есть веб-API, который вызывает функции из модулей приложений. Когда я останавливаю свое приложение (application:stop(foo).), веб-сервер все еще может вызывать функции foo.

Я считаю, что "не идиоматично" не иметь надлежащего автоматического выключателя для приложения foo.

Означает ли это, что каждая публичная функция из foo должна порождать процесс под своим супервизором?

Спасибо, Бастьен

1 Ответ

5 голосов
/ 02 мая 2019

Не обязательно по двум причинам:

Приложение foo будет иметь два вида функций: те, которые требуют выполнения рабочих процессов, и те, которые не выполняют (скорее всего, чистые функции),Если приложение остановлено, очевидно, что первый вызовет сбой при вызове, в то время как последний все еще будет работать.В соответствии с философией Эрланга «пусть он рушится», это просто еще одно условие ошибки, которое веб-сервер должен обрабатывать (или не обрабатывать).Если чистые функции по-прежнему работают, нет никаких причин запрещать веб-серверу вызывать их: это означает, что большая часть системы функционирует.

В узле Erlang остановка приложения - это не то, что выобычно делаю.Приложение Erlang объявляет зависимости, то есть приложения, которые должны быть запущены для правильной работы.Вы заметите, что если вы попытаетесь запустить приложение до его зависимостей, оно откажется запускаться.Хотя приложения можно останавливать вручную, это означает, что состояние узла больше не соответствует предположениям модели приложения.При создании «релиза», состоящего из набора приложений Erlang, обычно все они запускаются как permanent приложений, что означает, что в случае сбоя какого-либо одного приложения весь узел Erlang завершит работу, чтобы не нарушить это предположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...