Узел.js или Erlang
Мне очень нравятся эти инструменты, когда дело доходит до уровня параллелизма, с которым он может справиться.
Erlang выглядит гораздо более стабильным решением, но требует гораздо больше обучения и много погружения в функциональную языковую парадигму. И похоже, что Erlang делает его намного лучше, когда речь заходит о многоядерных процессорах(исправьте меня, если я ошибаюсь).
но что я должен выбрать? Какой из них лучше в краткосрочной/долгосрочной перспективе?
моя цель-изучить инструмент, который делает масштабирование моих веб-проектов под высокой нагрузкой проще, чем на традиционных языках.
9 ответов:
Я бы дал Эрлангу попробовать. Даже если это будет более крутая кривая обучения, вы получите больше от нее, так как вы будете изучать функциональный язык программирования. Кроме того, поскольку Erlang специально разработан для создания надежных, высококонкурентных систем, вы узнаете много нового о создании масштабируемых сервисов одновременно.
Я не могу говорить за Эрланга, но несколько вещей, которые не были упомянуты о node:
- Node использует движок V8 от Google для компиляции javascript в машинный код. Так что узел на самом деле довольно быстро. Так что это на вершине преимуществ скорости, предлагаемых событийным программированием и неблокирующим io.
- узел имеет довольно активное сообщество. Перейти на их IRC группы на freenode и вы увидите, что я имею в виду
- Я заметил, что выше комментарии толчок Erlang на том основании, что будет полезно изучить функциональный язык программирования. Хотя я согласен, что важно расширить свой набор навыков и получить один из них под вашим поясом, вы не должны основывать проект на том, что вы хотите изучить новый стиль программирования
- С другой стороны, Javascript уже находится в парадигме, в которой вам удобно писать! Кроме того, это javascript, поэтому при написании кода на стороне клиента он будет выглядеть и чувствовать себя последовательным.
- сообщество узла имеет уже откачали тонны модули! Есть модули для redis, mongodb, couch, и что у вас есть. Еще один хороший модуль, чтобы посмотреть в это Экспресс (думаю, Синатра для узла)
Проверьте видео в блоге yahoo Райана Даля, парня, который на самом деле написал node. Я думаю, что это поможет вам лучше понять, где находится узел, и куда он идет.
имейте в виду, что узел все еще находится в стадии развития, и таким образом, претерпевает довольно много изменений-изменения, которые сломали более ранний код. Однако, предположительно, это в тот момент, когда вы можете ожидать, что API не изменится слишком сильно. Так что если вы ищете что-то интересное, я бы сказал, что node-отличный выбор.
Я давний программист Erlang, и этот вопрос побудил меня взглянуть на узел.js. Это выглядит чертовски хорошо.
похоже, что вам нужно создать несколько процессов, чтобы воспользоваться несколькими ядрами. Я ничего не вижу о настройке близости процессора, хотя. Вы можете использовать taskset на linux, но он, вероятно, должен быть параметризован и установлен в программе.
Я также заметил, что поддержка платформы может быть немного слабее. В частности, похоже, что вам нужно будет работать под поддержкой Cygwin для Windows.
выглядит хорошо.
Edit
узел.js теперь имеет встроенную поддержку для Windows.
Я смотрю на те же две альтернативы, что и вы, готтс, для нескольких проектов.
до сих пор лучшая бритва, которую я придумал, чтобы решить между ними для данного проекта, - это нужно ли мне использовать Javascript. Одна существующая система, которую я хочу перенести, уже написана на Javascript, поэтому ее следующая версия, скорее всего, будет выполнена в узле.js. Другие проекты будут выполняться в некоторых веб-фреймворках Erlang, поскольку нет существующей базы кода для миграции.
другой считается, что Erlang масштабируется далеко за пределами нескольких ядер, он может масштабироваться до целого Центра обработки данных. Я не вижу встроенного механизма в узле.js, который позволяет мне отправлять другому JS-процессу сообщение, не заботясь о том, на какой машине он находится, но это встроено прямо в Erlang на самых низких уровнях. Если ваша проблема недостаточно велика, чтобы нуждаться в нескольких машинах, или если она не требует нескольких взаимодействующих процессов, это преимущество вряд ли будет иметь значение, поэтому вы должны игнорировать его.
Erlang это действительно глубокий бассейн для ныряния. Я бы предложил сначала написать автономную функциональную программу, прежде чем вы начнете создавать веб-приложения. Еще более простой первый шаг, так как Вы, кажется, комфортно с Javascript, чтобы попробовать Программирование JS в более функциональном стиле. Если вы используете jQuery или Prototype,вы уже начали этот путь. Попробуйте прыгнуть между чистым функциональным программированием в Erlang или одним из его родственников (Haskell, F#, Scala...) и функционального кода.
Как только вы освоитесь функциональное программирование, найдите один из многих веб-фреймворков Erlang; вы, вероятно, не должны писать свое приложение непосредственно на что-то низкоуровневое, например
inets
на этой поздней стадии. Посмотрите на что-то вроде Азот, например.
хотя я лично пошел бы на Эрланг, я признаю, что я немного предвзято отношусь к JavaScript. Мой совет заключается в том, что вы оцениваете несколько пунктов:
- вы повторно используете существующий код на любом из этих языков (как с точки зрения исходного кода, так и опыта программиста!)
- вам нужны / нужны обновления на лету без остановки приложения (именно здесь Erlang выигрывает по умолчанию - его среда выполнения была разработана для этого случая, и OTP содержит все инструменты необходимо)
- насколько велик ожидаемый трафик, с точки зрения отдельных, параллельных операций, а не пропускной способности?
- насколько "параллельны" операции, которые вы выполняете для каждого запроса?
Erlang имеет действительно тонко настроенный параллелизм и сеть-прозрачная параллельная распределенная система. В зависимости от того, что именно является проектом, наличие зрелой реализации такой системы может перевесить любые вопросы, касающиеся изучения нового языка. Есть также два другие языки, которые работают на Erlang VM, которые вы можете использовать, Ruby / Python-like Reia и Шепелявый Эрланг.
еще один вариант-использовать оба, особенно с использованием Erlang в качестве своего рода"хаба". Я не уверен, если узел.js имеет внешнюю систему интерфейса функций, но если она есть, Erlang имеет библиотеку C для внешних процессов для взаимодействия с системой, как и любой другой процесс Erlang.
похоже, что Erlang лучше работает для развертывания на относительно низком сервере (512MB 4-core 2.4 GHz AMD VM). Это от опыт SyncPad сравнения Эрланга против узла.JS-реализации их серверного приложения виртуальной доски.
whatsapp никогда не сможет достичь уровня масштабируемости и надежности без erlang https://www.youtube.com/watch?v=c12cYAUTXXs
есть еще один язык на той же виртуальной машине, что и erlang ->эликсир
Это очень интересная альтернатива Эрлангу, проверьте это.
также он имеет быстрорастущий веб-фреймворк на его основе ->Phoenix Framework
Я предпочитаю Erlang над узлом. Если вы хотите параллелизм, узел может быть заменен Erlang или Golang из-за их легких процессов веса.
Erlang не легко узнать, поэтому требует много усилий, но его сообщество активно, поэтому может получить помощь от этого, это только причина, по которой люди предпочитают Node .