Передача приложений на подчиненные узлы Erlang

В распределенной системе есть мастер, который запускает группу рабов с помощью slave: start. Он использует лагер для регистрации сообщений на ведущем устройстве, клиенты отправляют сообщения журнала ведущему устройству, а ведущий регистрирует их.

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

Я попытался запустить независимое приложение лагера на подчиненных узлах, но жалуется, что не нашел для него файл приложения: error,{"нет такого файла или каталога","goldrush.app"} (goldrush - это зависимость лагера).

Как эти приложения должны быть распределены по рабам?

1 ответ

Приложения должны предпочтительно распространяться как часть выпуска Erlang. Это означает создание релиза с Reltool, Rebar или Relx. При таком процессе вы гарантируете, что у вас всегда есть нужные приложения (если ваше приложение правильно зависит от других приложений, таких как Lager).

Другой вариант - убедиться, что приложение (и его зависимости) существует в целевой системе перед его запуском. Это более ручной подход, но может быть, например, вытащить исходный репозиторий и запустить rebar get-deps среди других команд, чтобы правильно построить систему. После того, как все зависимости загружены и собраны, вы можете запустить систему.

Невозможно передать приложения Erlang на другой узел через сам Erlang. С помощью обмана можно отправлять отдельные модули Erlang по проводам в виде двоичных файлов. Это не рекомендуется для приложений, потому что они могут зависеть от чего-то еще (например, файлов приложений и личных данных).

Итог: вам нужно убедиться, что приложение и его зависимости существуют на цели самостоятельно, с помощью вашей собственной процедуры развертывания.

Другие вопросы по тегам