Да, вы правы. Спасибо за замечание. Поправил в статье.
Про .erlang.cookie: лучше сочинять самому, любую достаточно длинную последовательность случайных символов. Я не силен в криптографии, но думаю длиной не менее 16 символов или 128 бит.
Работало двое. Мои познания в серверном программировании невелики. Дима же, является большим экспертом и архитектором серверных решений. Собственно он и выбрал Эрланг. Работали в обычном темпе, по 8-10 часов, то есть не по 12 часов каждые сутки :) В этом смысле сам Эрланг позволяет писать серверные решения действительно быстро.
Я немного ошибся, мы начали выбирать язык для сервера в июне и с середины июня уже начали изучать Эрланг. А сервер Рисоваськи в целом закончили за 4,5 месяца.
Всей системе в целом список работающих нод можно считать известным, но это не обязательно на самом деле. Может, например, нода упала и вышла экстренно из системы.
Сам Эрланг не требует для своей работы, чтобы каждая нода знала все работающие ноды сразу и постоянно, соответсвенно, можно и систему строить так, чтобы новая нода знала, только то, что ей нужно для своей работы.
Если говорить про нашу систему конкретно, то у нас стартующая нода может выполнять одну из перечисленных функций или все сразу:
— нода базы данных Mnesia, тут крутиться только база
— сервер приложения, т.е. обрабатывает запросы от клиентских приложений,
— сервер нотификации
Например, если нода только для БД, то ей при старте нужно узнать только любую ноду, которая хранит схему базы, чтобы войти в схему.
Куки можно задавать при старте ноды и не нужно хранить на компьютере заранее.
Понятно. Рад, что действительно на Эрланге :) Возможно, прямо так и написать в вакансии про деньги, как вы написали в этом комментарии выше. По моему 30 тыс. даже минимум для перечисленных требований маловато, а с пояснением становиться понятно.
Мы используем Amazon EC2. Преимущества описаны в комментах выше. Действительно очень быстро и запустить и остановить любое кол-во серверов. Оплата почасовая за сервер и отдельно за трафик. Я собираюсь писать подробную статью про это. Уже скоро :)
Ответ на второй вопрос: да :) Но у нас сделано скорее наоборот. При запуске новая нода сразу запускает приложение, которое само включает ноду в уже работающую систему, тем самым наращивая мощность системы. Подход: «определить список нод» в одном месте ошибочен в том, что он централизованный. При выходе из строя этого центра выходит из строя и вся система. К тому же в EC2 при зависании компьютера ты теряешь на нем все данные, если они конечно не хранились на EBS.
Отвечаю на вопросы:
Вообще-то ты можешь назвать ноду как хочешь. Я имею ввиду часть, которая пишется после знака "@", например: «super@supersite». Пока нет потребности взаимодействовать с другими нодами в сети проблем это вызывать не будет. Но если есть задача взаимодействовать с нодами на других, то тогда виртуальная машина полагается на нижестоящую операционную систему при определения IP адреса другой ноды при поиске.
Списка имеющихся серверов в каждой конкретной виртуальной машине эрланга не храниться. Связь между двумя нодами устанавливается только при первой необходимости, например выполнить в Эрланге простой пинг другой ноды: net_adm:ping(name_of_other_node). То есть если просто стартовать одну ноду, то она не начнет искать другие ноды в сети сразу. По моему все это напоминает простую работу в сети. При обращении из браузера по адресу habrahabra.ru определяется IP адрес сервера через DNS. Эрланг, через операционную систему, поступает точно так же.
Использовать повторно код можно, тут я не вижу отличий от других языков. Можно оформлять код в библиотеки и использовать их в других проектах. На практике у нас пока один проект на Эрланге, поэтому у нас пока нет такого опыта. Но если в следующем проекте, например, потребуется парсинг XML с проверкой по модели, то мы можем вполне взять кусок из текущего проекта.
Требования были масштабируемость системы, простота написания системы, высокая надежность и выдерживание большой нагрузки на сервера. В общем мы рассматриваем наш проект сразу, как проект мирового уровня известности с миллионами пользователей. При выборе естественно выбирали и из традиционных языков C++, C#, Java, а так же Python, Ruby, PHP. На «традиционных» языках писать и отлаживать систему такого уровня обычно просто очень долго, а нам нужно было уложиться при разработке с нуля в 4-6 месяцев вместе с отладкой. Плюс желание высокой надежности системы сузили выбор до Эрланга.
Да какие уж наезды. Сам в нем программирую :) Но я бы все же выбрал erlIDE, если бы сразу с него начал. Просто тогда он был еще не готов. Вот еще доработают erlIDE и наверно на него все же перейду. Лично мне все же «традиционные» графические IDE больше нравятся.
Насколько позволял размер статья более подробно про OTP Design Principles написал во второй статье: habrahabr.ru/blogs/erlang/51796/
Буду еще писать дальше в следующих статьях пример сетевого приложения на Эрланге, но без примера портирования, так в этом не специалист.
Про .erlang.cookie: лучше сочинять самому, любую достаточно длинную последовательность случайных символов. Я не силен в криптографии, но думаю длиной не менее 16 символов или 128 бит.
Сам Эрланг не требует для своей работы, чтобы каждая нода знала все работающие ноды сразу и постоянно, соответсвенно, можно и систему строить так, чтобы новая нода знала, только то, что ей нужно для своей работы.
Если говорить про нашу систему конкретно, то у нас стартующая нода может выполнять одну из перечисленных функций или все сразу:
— нода базы данных Mnesia, тут крутиться только база
— сервер приложения, т.е. обрабатывает запросы от клиентских приложений,
— сервер нотификации
Например, если нода только для БД, то ей при старте нужно узнать только любую ноду, которая хранит схему базы, чтобы войти в схему.
Куки можно задавать при старте ноды и не нужно хранить на компьютере заранее.
Отвечаю на вопросы:
Вообще-то ты можешь назвать ноду как хочешь. Я имею ввиду часть, которая пишется после знака "@", например: «super@supersite». Пока нет потребности взаимодействовать с другими нодами в сети проблем это вызывать не будет. Но если есть задача взаимодействовать с нодами на других, то тогда виртуальная машина полагается на нижестоящую операционную систему при определения IP адреса другой ноды при поиске.
Списка имеющихся серверов в каждой конкретной виртуальной машине эрланга не храниться. Связь между двумя нодами устанавливается только при первой необходимости, например выполнить в Эрланге простой пинг другой ноды: net_adm:ping(name_of_other_node). То есть если просто стартовать одну ноду, то она не начнет искать другие ноды в сети сразу. По моему все это напоминает простую работу в сети. При обращении из браузера по адресу habrahabra.ru определяется IP адрес сервера через DNS. Эрланг, через операционную систему, поступает точно так же.
Использовать повторно код можно, тут я не вижу отличий от других языков. Можно оформлять код в библиотеки и использовать их в других проектах. На практике у нас пока один проект на Эрланге, поэтому у нас пока нет такого опыта. Но если в следующем проекте, например, потребуется парсинг XML с проверкой по модели, то мы можем вполне взять кусок из текущего проекта.
Требования были масштабируемость системы, простота написания системы, высокая надежность и выдерживание большой нагрузки на сервера. В общем мы рассматриваем наш проект сразу, как проект мирового уровня известности с миллионами пользователей. При выборе естественно выбирали и из традиционных языков C++, C#, Java, а так же Python, Ruby, PHP. На «традиционных» языках писать и отлаживать систему такого уровня обычно просто очень долго, а нам нужно было уложиться при разработке с нуля в 4-6 месяцев вместе с отладкой. Плюс желание высокой надежности системы сузили выбор до Эрланга.
habrahabr.ru/blogs/erlang/51796/
Спасибо за вопрос!
habrahabr.ru/blogs/erlang/51796/
Спасибо за намек :)
habrahabr.ru/blogs/erlang/51796/
Спасибо за напоминание! :)
P.S. Комментарий ниже создал по ошибке.
habrahabr.ru/blogs/erlang/51796/
Буду еще писать дальше в следующих статьях пример сетевого приложения на Эрланге, но без примера портирования, так в этом не специалист.
habrahabr.ru/blogs/erlang/51796/