Комментарии 41
полезную работу делаете, спасибо
пожалуйста, поделитесь инвайтом со страждущими в русской ерланг рассылке
пожалуйста, поделитесь инвайтом со страждущими в русской ерланг рассылке
+1
Спасибо и тебе! Извини, инвайт, считай, отдал своему хорошему другу на написание статьи.
+1
Вот на емакс наезжать не надо, лучшей IDE до сих пор не придумали.
0
Да какие уж наезды. Сам в нем программирую :) Но я бы все же выбрал erlIDE, если бы сразу с него начал. Просто тогда он был еще не готов. Вот еще доработают erlIDE и наверно на него все же перейду. Лично мне все же «традиционные» графические IDE больше нравятся.
0
> Да какие уж наезды.
Извини, показалось.
> Но я бы все же выбрал erlIDE, если бы сразу с него начал. Просто тогда он был еще не готов. Вот еще доработают erlIDE и наверно на него все же перейду. Лично мне все же «традиционные» графические IDE больше нравятся.
Фишка емакса — многоязыковые проекты и легкость автоматизации мелких задач. Если используется один язык — то лучше конечно писать в заточенной под него ИДЕ.
Извини, показалось.
> Но я бы все же выбрал erlIDE, если бы сразу с него начал. Просто тогда он был еще не готов. Вот еще доработают erlIDE и наверно на него все же перейду. Лично мне все же «традиционные» графические IDE больше нравятся.
Фишка емакса — многоязыковые проекты и легкость автоматизации мелких задач. Если используется один язык — то лучше конечно писать в заточенной под него ИДЕ.
+1
>gen_fsm — базовый модуль, реализующий конечную машину состояний
Это то что обычно конечными автоматами называется? :-)
Это то что обычно конечными автоматами называется? :-)
0
Спасибо, очень доходчиво и понятно пишете.
Соответственно вопросы:
Если ноды имеют имя, привязаное к определенному хосту, значит ли это, что приложение сильно зависимо от используемого сетевого окружения и оборудования? Есть ли возможность как-то гибко манипулировать списком имеющихся серверов? Как это настраивается?
Как обстоят дела с reusability кода?
Какие основные требования повлияли на выбор именно Erlang, когда вы выбирали язык для реализации Рисоваськи? Какие альтернативы рассматривались?
Покорнейше благодарю.
Соответственно вопросы:
Если ноды имеют имя, привязаное к определенному хосту, значит ли это, что приложение сильно зависимо от используемого сетевого окружения и оборудования? Есть ли возможность как-то гибко манипулировать списком имеющихся серверов? Как это настраивается?
Как обстоят дела с reusability кода?
Какие основные требования повлияли на выбор именно Erlang, когда вы выбирали язык для реализации Рисоваськи? Какие альтернативы рассматривались?
Покорнейше благодарю.
0
Спасибо!
Отвечаю на вопросы:
Вообще-то ты можешь назвать ноду как хочешь. Я имею ввиду часть, которая пишется после знака "@", например: «super@supersite». Пока нет потребности взаимодействовать с другими нодами в сети проблем это вызывать не будет. Но если есть задача взаимодействовать с нодами на других, то тогда виртуальная машина полагается на нижестоящую операционную систему при определения IP адреса другой ноды при поиске.
Списка имеющихся серверов в каждой конкретной виртуальной машине эрланга не храниться. Связь между двумя нодами устанавливается только при первой необходимости, например выполнить в Эрланге простой пинг другой ноды: net_adm:ping(name_of_other_node). То есть если просто стартовать одну ноду, то она не начнет искать другие ноды в сети сразу. По моему все это напоминает простую работу в сети. При обращении из браузера по адресу habrahabra.ru определяется IP адрес сервера через DNS. Эрланг, через операционную систему, поступает точно так же.
Использовать повторно код можно, тут я не вижу отличий от других языков. Можно оформлять код в библиотеки и использовать их в других проектах. На практике у нас пока один проект на Эрланге, поэтому у нас пока нет такого опыта. Но если в следующем проекте, например, потребуется парсинг XML с проверкой по модели, то мы можем вполне взять кусок из текущего проекта.
Требования были масштабируемость системы, простота написания системы, высокая надежность и выдерживание большой нагрузки на сервера. В общем мы рассматриваем наш проект сразу, как проект мирового уровня известности с миллионами пользователей. При выборе естественно выбирали и из традиционных языков C++, C#, Java, а так же Python, Ruby, PHP. На «традиционных» языках писать и отлаживать систему такого уровня обычно просто очень долго, а нам нужно было уложиться при разработке с нуля в 4-6 месяцев вместе с отладкой. Плюс желание высокой надежности системы сузили выбор до Эрланга.
Отвечаю на вопросы:
Вообще-то ты можешь назвать ноду как хочешь. Я имею ввиду часть, которая пишется после знака "@", например: «super@supersite». Пока нет потребности взаимодействовать с другими нодами в сети проблем это вызывать не будет. Но если есть задача взаимодействовать с нодами на других, то тогда виртуальная машина полагается на нижестоящую операционную систему при определения IP адреса другой ноды при поиске.
Списка имеющихся серверов в каждой конкретной виртуальной машине эрланга не храниться. Связь между двумя нодами устанавливается только при первой необходимости, например выполнить в Эрланге простой пинг другой ноды: net_adm:ping(name_of_other_node). То есть если просто стартовать одну ноду, то она не начнет искать другие ноды в сети сразу. По моему все это напоминает простую работу в сети. При обращении из браузера по адресу habrahabra.ru определяется IP адрес сервера через DNS. Эрланг, через операционную систему, поступает точно так же.
Использовать повторно код можно, тут я не вижу отличий от других языков. Можно оформлять код в библиотеки и использовать их в других проектах. На практике у нас пока один проект на Эрланге, поэтому у нас пока нет такого опыта. Но если в следующем проекте, например, потребуется парсинг XML с проверкой по модели, то мы можем вполне взять кусок из текущего проекта.
Требования были масштабируемость системы, простота написания системы, высокая надежность и выдерживание большой нагрузки на сервера. В общем мы рассматриваем наш проект сразу, как проект мирового уровня известности с миллионами пользователей. При выборе естественно выбирали и из традиционных языков C++, C#, Java, а так же Python, Ruby, PHP. На «традиционных» языках писать и отлаживать систему такого уровня обычно просто очень долго, а нам нужно было уложиться при разработке с нуля в 4-6 месяцев вместе с отладкой. Плюс желание высокой надежности системы сузили выбор до Эрланга.
0
гм, а к примеру определить список нод на которых выполняется приложение в одном месте можно каким-либо образом?
чтобы наращивать мощность системы просто добавлением ноды?
чтобы наращивать мощность системы просто добавлением ноды?
0
Ответ на второй вопрос: да :) Но у нас сделано скорее наоборот. При запуске новая нода сразу запускает приложение, которое само включает ноду в уже работающую систему, тем самым наращивая мощность системы. Подход: «определить список нод» в одном месте ошибочен в том, что он централизованный. При выходе из строя этого центра выходит из строя и вся система. К тому же в EC2 при зависании компьютера ты теряешь на нем все данные, если они конечно не хранились на EBS.
0
ага, вот так. спасибо
0
Но список то нод заранее известен же? Так? Ведь для их работы нужно на них установить куку, значит список можно условно считать фиксированным.
Просто я как то слабо представляют себе приложение, которое встраивается в распределенную систему не зная заранее возможный перечень доступных хостов.
Просто я как то слабо представляют себе приложение, которое встраивается в распределенную систему не зная заранее возможный перечень доступных хостов.
0
Всей системе в целом список работающих нод можно считать известным, но это не обязательно на самом деле. Может, например, нода упала и вышла экстренно из системы.
Сам Эрланг не требует для своей работы, чтобы каждая нода знала все работающие ноды сразу и постоянно, соответсвенно, можно и систему строить так, чтобы новая нода знала, только то, что ей нужно для своей работы.
Если говорить про нашу систему конкретно, то у нас стартующая нода может выполнять одну из перечисленных функций или все сразу:
— нода базы данных Mnesia, тут крутиться только база
— сервер приложения, т.е. обрабатывает запросы от клиентских приложений,
— сервер нотификации
Например, если нода только для БД, то ей при старте нужно узнать только любую ноду, которая хранит схему базы, чтобы войти в схему.
Куки можно задавать при старте ноды и не нужно хранить на компьютере заранее.
Сам Эрланг не требует для своей работы, чтобы каждая нода знала все работающие ноды сразу и постоянно, соответсвенно, можно и систему строить так, чтобы новая нода знала, только то, что ей нужно для своей работы.
Если говорить про нашу систему конкретно, то у нас стартующая нода может выполнять одну из перечисленных функций или все сразу:
— нода базы данных Mnesia, тут крутиться только база
— сервер приложения, т.е. обрабатывает запросы от клиентских приложений,
— сервер нотификации
Например, если нода только для БД, то ей при старте нужно узнать только любую ноду, которая хранит схему базы, чтобы войти в схему.
Куки можно задавать при старте ноды и не нужно хранить на компьютере заранее.
0
Хочу вот вакансию на ерланговую работу разместить, а кармы не хватает :(
0
Ну-ка :)
0
habrahabr.ru/job/804/
Большое спасибо!
Большое спасибо!
0
Что-то, однако, через поиск по ключевым словам не находится
0
К тому же вакансия почти не касается Erlang'a. Написали бы Эрланг в разделе обязательно знать :)
0
Эрланга это касается напрямую, так как люди писать будут на нём. Но если я напишу его как обязательный, то людей будет ещё меньше.
Впрочем, даже если человек не знает Эрланга и не хочет его изучать, но разбирается в основных пунктах, то он нам тоже нужен, так-то :)
Может, мы денег мало обещаем? Просто 30-35 тысяч у нас как старт для минимума знаний, потом люди получают заметно больше, если видно, что человек растёт.
Впрочем, даже если человек не знает Эрланга и не хочет его изучать, но разбирается в основных пунктах, то он нам тоже нужен, так-то :)
Может, мы денег мало обещаем? Просто 30-35 тысяч у нас как старт для минимума знаний, потом люди получают заметно больше, если видно, что человек растёт.
0
Понятно. Рад, что действительно на Эрланге :) Возможно, прямо так и написать в вакансии про деньги, как вы написали в этом комментарии выше. По моему 30 тыс. даже минимум для перечисленных требований маловато, а с пояснением становиться понятно.
0
Если будут писать непосредственно на нем, то не очень понятно, зачем к примеру тот же С. Имхо, если человек знает хорошо сетевой стек, особенности настройки ОСи да еще и на сях пишет еще и с опытом работы 2 года, то он наверняка уже где-то работает. И для перехода ему нужен как-то стимул… А в таком контексте даже для регионов это не очень много. Хотя если сделать на скидку на кризис, то може быть…
0
А в PATH нужно наверное C:\Program Files\erl5.6.5\binпрописывать, а не C:\Program Files\erl5.6.5\ который прописали в ERL_TOP?
Содержимое для .erlang.cookie генерируется или сочиняется из головы? Какой длины, какие рекомендации?
Содержимое для .erlang.cookie генерируется или сочиняется из головы? Какой длины, какие рекомендации?
0
Да, вы правы. Спасибо за замечание. Поправил в статье.
Про .erlang.cookie: лучше сочинять самому, любую достаточно длинную последовательность случайных символов. Я не силен в криптографии, но думаю длиной не менее 16 символов или 128 бит.
Про .erlang.cookie: лучше сочинять самому, любую достаточно длинную последовательность случайных символов. Я не силен в криптографии, но думаю длиной не менее 16 символов или 128 бит.
0
А в документации по erlang этот вопрос как-то обсуждается? А то не ясно, что это за куки, какой может быть длины, какая длина критична для взлома и т.д.
0
Я не встречал. Немного описано здесь:
0
Я не встречал. Немного описано здесь:
erlang.org/doc/getting_started/conc_prog.html
У меня лично создалось впечатление, что это не серьезная защита от взлома, а просто минимально необходимая. Если вы хотите действительно надежное решение, до немного доработав Erlang можно перейти на общение нод через SSL. Поищите по этой теме в google.
erlang.org/doc/getting_started/conc_prog.html
У меня лично создалось впечатление, что это не серьезная защита от взлома, а просто минимально необходимая. Если вы хотите действительно надежное решение, до немного доработав Erlang можно перейти на общение нод через SSL. Поищите по этой теме в google.
0
Я обратил внимание на следующий факт.
Если не создать файл .erlang.cookie в каталоге $HOME, то при запуске распределенной ноды (когда запускаем erl с параметром -sname или -name и именем ноды) он будет создан автоматически и куки будет сгенерирован. Алгоритм генерации куки можно найти в файле C:\Program Files\erl5.6.5\lib\kernel-2.12.5\src\auth.erl. По исходному тексту, сгенеренный куки — это строка заглавных латинских букв длинной в 20 символов.
Если не создать файл .erlang.cookie в каталоге $HOME, то при запуске распределенной ноды (когда запускаем erl с параметром -sname или -name и именем ноды) он будет создан автоматически и куки будет сгенерирован. Алгоритм генерации куки можно найти в файле C:\Program Files\erl5.6.5\lib\kernel-2.12.5\src\auth.erl. По исходному тексту, сгенеренный куки — это строка заглавных латинских букв длинной в 20 символов.
+1
Спасибо за информацию! Не знал.
0
Я сам совершенно случайно на это наткнулся. По Вашей инструкции сделал .erlang.cookie, но не знал что вписать и вписывать не стал, решил почитать литературу и потом вписать. Но по одному из туториалов, где демонстрировалось создание распределенной ноды, я запустил erl -name ping и у меня оболчка не запустилась, а выдала длинное ругательство и упала с дампом. Прочтя ругательства, я понял, что длина строки куки слишком мала, тогда я сделал поиск в исходниках по строке с ошибкой и все стало понятно.
0
На английском мне понравилось это введение: Thinking in Erlang, Robert Baruch
0
Да, читал. Хороший документ.
0
Еще неплохая вводная статья от Джима Ларсона (инженера из гугла): Erlang for Concurrent Programming (там можно PDF взять)
0
Я так глазами пробежался. Пара вопросов, возможно ответы были не заметил.
Какие http сервера у вас? yaws, nginx или какая-то связка?
Вы используете какой-то фреймворк (erlyweb например) или сами все пишете?
И последний совсем наглый: вы в конторе серверную часть ерланговскую под виндой писали?
Какие http сервера у вас? yaws, nginx или какая-то связка?
Вы используете какой-то фреймворк (erlyweb например) или сами все пишете?
И последний совсем наглый: вы в конторе серверную часть ерланговскую под виндой писали?
0
Мы используем nginx для балансировки нагрузки между серверами и работы с SSL (https). За nginx стоит mochiweb. Фрэймворки не используем. И… да, мы разрабатываем под Винду, а работает под Ubuntu :)
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Erlang в Рисоваське, часть 2 — ответы на вопросы