11 февраля 2013 г. FreeBSD Erlang EN In English

Erlang. Фиксы запуска нескольких копий epmd

Столкнулся с проблемой, когда не пингуется erlang-нода на сервере, где запущено два epmd. А запущено их два, потому что один запускается проектом (при старте erl), а второй запускает ejabberd.

Симптомы напоминают проблему с firewall:

(test2@127.0.0.1)1> net_adm:ping('test1@127.0.0.1').
pang

Смотрим ps ax:

ps ax | grep epmd
root     1212   ... /usr/local/lib/erlang/erts-5.9.3.1/bin/epmd -daemon
root     1515   ... /usr/local/bin/epmd -daemon

Если выполнить kill 1212 1515 и запустить еще раз erl, то станет пинговаться:

(test2@127.0.0.1)1> net_adm:ping('test1@127.0.0.1').
pong

Дополнительные симптомы я описывал на Stack Overflow.

Решение

Открываем на редактирование /etc/rc.conf:

ejabberd_enable="YES"
epmd_enable="YES"

А в /usr/local/etc/rc.d/epmd добавляем:

start_precmd=epmd_prestart
epmd_prestart() {
    `ps ax | grep epmd | awk '{ print $1}' | xargs kill`
    return 0
}

Приходится использовать такой костыль, так как я не смог найти как заставить ejabberd не поднимать epmd.

Комментарии

Хороший человек 12 февраля 2013 г. 14:54

Стоит ли переходить на эрланг (или, хотя бы, начать использовать), если всё устраивает в питоне?

Ну они разные и для разного, просто питон многофункциональный, а erlang более узконаправленный. Надо выбирать под проект технологии.

Если надо разбирать много данных (роутинг, краулинг), то erlang самое то. Но если при этом есть еще куча бизнес логики, то стоит использовать erlang-порты и писать бизнес-логику на python/ruby и т.п.

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

Сложно сказать про базовые знания, у меня по сути был опыт только с императивными языками, Erlang сильно отличается по парадигме. Но я бы не сказал что он труден, по началу кажется совсем сложным, а потом как-то переключаешься/вникаешь и все стает просто и легко.

Опыт с функциональными языками был бы полезен, но не так сильно как может показаться.

По поводу литературы, я тут привел ссылочки http://adw0rd.com/bookmarks/ , по ним и изучал

Спасибо большое! Слышал, многие говорят что он учится за неделю, но мне кажется что за неделю его освоить могут те, кто знаком с функциональным программированием.

Чаще говорят о "двух неделях", но я изучал медленно, по 2 часа в неделю, так что проверить не смог это... Хочу в течении двух недель оформить статью о "вступлении в Erlang", но думаю вы выучите раньше, чем я закончу :-)

О! Я дождался этой статьи! Поворачиваем блог в правильном направлении :)

Язык простой. Главное понимать, что это не язык в привычном понимании, а платформа. И сложность в нем не в постижении функционально-ориентированного стиля, а в постижении процессно-ориентированного стиля. Вся его ценность не в том, что там иммутабельность, паттерн-матчинг и списковые выражения, а в том, что процессы, ноды, подключаемая внешняя логика и всё это с роскошной инфраструктурой.

К эрлангу приходят не потому, что питон не справляется с описанием бизнес-логики, или хочется статической уверенности. А потому что на питоне поддерживать кластер из множества процессов с обменами, репликацией и фаиловером очень муторно.

Если ваши задачи укладываются в процесс на одной машине - эрланг вам не нужен. Совершенно.
Если у вас кластер на питоне, с каким-нибудь rabbitMQ, базами данных, редисом, мемкешем, с кучей сервисов, всё это местами работает, местами нет и каждый шаг масштабирования это боль - остановитесь. Потратьте две недели, месяц на изучение эрланга. Это с лихвой окупится

Да, Боря всё верно говорит! Erlang - это офигенная платформа для распределенной работы

Оставьте свой комментарий

Markdown