Как стать автором
Обновить

Комментарии 41

полезную работу делаете, спасибо
пожалуйста, поделитесь инвайтом со страждущими в русской ерланг рассылке
Спасибо и тебе! Извини, инвайт, считай, отдал своему хорошему другу на написание статьи.
P.S. Комментарий ниже создал по ошибке.
ну значит следующим ,)
Следующим инвайтом обязуюсь поделиться в русской эрланг-рассылке, тому кто захочет писать статью про Эрланг :)
Спасибо и тебе! Извини, инвайт, считай, отдал своему хорошему другу на написание статьи.
Вот на емакс наезжать не надо, лучшей IDE до сих пор не придумали.
Да какие уж наезды. Сам в нем программирую :) Но я бы все же выбрал erlIDE, если бы сразу с него начал. Просто тогда он был еще не готов. Вот еще доработают erlIDE и наверно на него все же перейду. Лично мне все же «традиционные» графические IDE больше нравятся.
> Да какие уж наезды.

Извини, показалось.

> Но я бы все же выбрал erlIDE, если бы сразу с него начал. Просто тогда он был еще не готов. Вот еще доработают erlIDE и наверно на него все же перейду. Лично мне все же «традиционные» графические IDE больше нравятся.

Фишка емакса — многоязыковые проекты и легкость автоматизации мелких задач. Если используется один язык — то лучше конечно писать в заточенной под него ИДЕ.
>gen_fsm — базовый модуль, реализующий конечную машину состояний
Это то что обычно конечными автоматами называется? :-)
Да.
Спасибо, очень доходчиво и понятно пишете.
Соответственно вопросы:
Если ноды имеют имя, привязаное к определенному хосту, значит ли это, что приложение сильно зависимо от используемого сетевого окружения и оборудования? Есть ли возможность как-то гибко манипулировать списком имеющихся серверов? Как это настраивается?

Как обстоят дела с reusability кода?

Какие основные требования повлияли на выбор именно Erlang, когда вы выбирали язык для реализации Рисоваськи? Какие альтернативы рассматривались?

Покорнейше благодарю.
Спасибо!

Отвечаю на вопросы:
Вообще-то ты можешь назвать ноду как хочешь. Я имею ввиду часть, которая пишется после знака "@", например: «super@supersite». Пока нет потребности взаимодействовать с другими нодами в сети проблем это вызывать не будет. Но если есть задача взаимодействовать с нодами на других, то тогда виртуальная машина полагается на нижестоящую операционную систему при определения IP адреса другой ноды при поиске.
Списка имеющихся серверов в каждой конкретной виртуальной машине эрланга не храниться. Связь между двумя нодами устанавливается только при первой необходимости, например выполнить в Эрланге простой пинг другой ноды: net_adm:ping(name_of_other_node). То есть если просто стартовать одну ноду, то она не начнет искать другие ноды в сети сразу. По моему все это напоминает простую работу в сети. При обращении из браузера по адресу habrahabra.ru определяется IP адрес сервера через DNS. Эрланг, через операционную систему, поступает точно так же.
Использовать повторно код можно, тут я не вижу отличий от других языков. Можно оформлять код в библиотеки и использовать их в других проектах. На практике у нас пока один проект на Эрланге, поэтому у нас пока нет такого опыта. Но если в следующем проекте, например, потребуется парсинг XML с проверкой по модели, то мы можем вполне взять кусок из текущего проекта.
Требования были масштабируемость системы, простота написания системы, высокая надежность и выдерживание большой нагрузки на сервера. В общем мы рассматриваем наш проект сразу, как проект мирового уровня известности с миллионами пользователей. При выборе естественно выбирали и из традиционных языков C++, C#, Java, а так же Python, Ruby, PHP. На «традиционных» языках писать и отлаживать систему такого уровня обычно просто очень долго, а нам нужно было уложиться при разработке с нуля в 4-6 месяцев вместе с отладкой. Плюс желание высокой надежности системы сузили выбор до Эрланга.
гм, а к примеру определить список нод на которых выполняется приложение в одном месте можно каким-либо образом?
чтобы наращивать мощность системы просто добавлением ноды?
Ответ на второй вопрос: да :) Но у нас сделано скорее наоборот. При запуске новая нода сразу запускает приложение, которое само включает ноду в уже работающую систему, тем самым наращивая мощность системы. Подход: «определить список нод» в одном месте ошибочен в том, что он централизованный. При выходе из строя этого центра выходит из строя и вся система. К тому же в EC2 при зависании компьютера ты теряешь на нем все данные, если они конечно не хранились на EBS.
ага, вот так. спасибо
Но список то нод заранее известен же? Так? Ведь для их работы нужно на них установить куку, значит список можно условно считать фиксированным.

Просто я как то слабо представляют себе приложение, которое встраивается в распределенную систему не зная заранее возможный перечень доступных хостов.
Всей системе в целом список работающих нод можно считать известным, но это не обязательно на самом деле. Может, например, нода упала и вышла экстренно из системы.
Сам Эрланг не требует для своей работы, чтобы каждая нода знала все работающие ноды сразу и постоянно, соответсвенно, можно и систему строить так, чтобы новая нода знала, только то, что ей нужно для своей работы.
Если говорить про нашу систему конкретно, то у нас стартующая нода может выполнять одну из перечисленных функций или все сразу:
— нода базы данных Mnesia, тут крутиться только база
— сервер приложения, т.е. обрабатывает запросы от клиентских приложений,
— сервер нотификации

Например, если нода только для БД, то ей при старте нужно узнать только любую ноду, которая хранит схему базы, чтобы войти в схему.
Куки можно задавать при старте ноды и не нужно хранить на компьютере заранее.
Хочу вот вакансию на ерланговую работу разместить, а кармы не хватает :(
Ну-ка :)
Что-то, однако, через поиск по ключевым словам не находится
К тому же вакансия почти не касается Erlang'a. Написали бы Эрланг в разделе обязательно знать :)
Эрланга это касается напрямую, так как люди писать будут на нём. Но если я напишу его как обязательный, то людей будет ещё меньше.
Впрочем, даже если человек не знает Эрланга и не хочет его изучать, но разбирается в основных пунктах, то он нам тоже нужен, так-то :)
Может, мы денег мало обещаем? Просто 30-35 тысяч у нас как старт для минимума знаний, потом люди получают заметно больше, если видно, что человек растёт.
Понятно. Рад, что действительно на Эрланге :) Возможно, прямо так и написать в вакансии про деньги, как вы написали в этом комментарии выше. По моему 30 тыс. даже минимум для перечисленных требований маловато, а с пояснением становиться понятно.
Если будут писать непосредственно на нем, то не очень понятно, зачем к примеру тот же С. Имхо, если человек знает хорошо сетевой стек, особенности настройки ОСи да еще и на сях пишет еще и с опытом работы 2 года, то он наверняка уже где-то работает. И для перехода ему нужен как-то стимул… А в таком контексте даже для регионов это не очень много. Хотя если сделать на скидку на кризис, то може быть…
А в PATH нужно наверное C:\Program Files\erl5.6.5\binпрописывать, а не C:\Program Files\erl5.6.5\ который прописали в ERL_TOP?
Содержимое для .erlang.cookie генерируется или сочиняется из головы? Какой длины, какие рекомендации?
Да, вы правы. Спасибо за замечание. Поправил в статье.
Про .erlang.cookie: лучше сочинять самому, любую достаточно длинную последовательность случайных символов. Я не силен в криптографии, но думаю длиной не менее 16 символов или 128 бит.
А в документации по erlang этот вопрос как-то обсуждается? А то не ясно, что это за куки, какой может быть длины, какая длина критична для взлома и т.д.
Я не встречал. Немного описано здесь:
Ссылка съелась.
Я не встречал. Немного описано здесь:
erlang.org/doc/getting_started/conc_prog.html

У меня лично создалось впечатление, что это не серьезная защита от взлома, а просто минимально необходимая. Если вы хотите действительно надежное решение, до немного доработав Erlang можно перейти на общение нод через SSL. Поищите по этой теме в google.
Я обратил внимание на следующий факт.
Если не создать файл .erlang.cookie в каталоге $HOME, то при запуске распределенной ноды (когда запускаем erl с параметром -sname или -name и именем ноды) он будет создан автоматически и куки будет сгенерирован. Алгоритм генерации куки можно найти в файле C:\Program Files\erl5.6.5\lib\kernel-2.12.5\src\auth.erl. По исходному тексту, сгенеренный куки — это строка заглавных латинских букв длинной в 20 символов.
Спасибо за информацию! Не знал.
Я сам совершенно случайно на это наткнулся. По Вашей инструкции сделал .erlang.cookie, но не знал что вписать и вписывать не стал, решил почитать литературу и потом вписать. Но по одному из туториалов, где демонстрировалось создание распределенной ноды, я запустил erl -name ping и у меня оболчка не запустилась, а выдала длинное ругательство и упала с дампом. Прочтя ругательства, я понял, что длина строки куки слишком мала, тогда я сделал поиск в исходниках по строке с ошибкой и все стало понятно.
Интересно, как вы пришли к открытию! :) Достойно!
Да, читал. Хороший документ.
Еще неплохая вводная статья от Джима Ларсона (инженера из гугла): Erlang for Concurrent Programming (там можно PDF взять)
Я так глазами пробежался. Пара вопросов, возможно ответы были не заметил.
Какие http сервера у вас? yaws, nginx или какая-то связка?
Вы используете какой-то фреймворк (erlyweb например) или сами все пишете?
И последний совсем наглый: вы в конторе серверную часть ерланговскую под виндой писали?
Мы используем nginx для балансировки нагрузки между серверами и работы с SSL (https). За nginx стоит mochiweb. Фрэймворки не используем. И… да, мы разрабатываем под Винду, а работает под Ubuntu :)
Мы используем nginx для балансировки нагрузки между серверами и работы с SSL (https). За nginx стоит mochiweb. Фрэймворки не используем. И… да, мы разрабатываем под Винду, а работает под Ubuntu :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории