Node.js или Erlang - PullRequest
       76

Node.js или Erlang

86 голосов
/ 10 июня 2010

Мне действительно нравятся эти инструменты, когда дело доходит до уровня параллелизма, с которым он может справиться.

Erlang выглядит гораздо более стабильным решением, но требует гораздо большего изучения и большого погружения в парадигму функционального языка.И похоже, что Erlang делает это намного лучше, когда дело доходит до многоядерных процессоров (поправьте меня, если я ошибаюсь).

Но какой мне выбрать?Какой из них лучше в краткосрочной / долгосрочной перспективе?

Моя цель - изучить инструмент, который делает масштабирование моих веб-проектов под большой нагрузкой легче, чем традиционные языки.

Ответы [ 9 ]

87 голосов
/ 10 июня 2010

Я бы попробовал Эрланга.Несмотря на то, что это будет более крутая кривая обучения, вы получите от нее больше пользы, поскольку будете изучать функциональный язык программирования.Кроме того, поскольку Erlang специально разработан для создания надежных систем с высокой степенью параллелизма, вы многое узнаете о создании служб с высокой степенью масштабируемости одновременно.

50 голосов
/ 24 июня 2010

Я не могу говорить за Эрланга, но несколько вещей, которые не были упомянуты об узле:

  • Узел использует движок Google V8 для фактической компиляции JavaScript в машинный код. Так что узел на самом деле довольно быстрый. Так что это помимо преимуществ скорости, предлагаемых программированием, управляемым событиями, и неблокирующим io.
  • У Node довольно активное сообщество. Перейдите к их группе IRC на freenode, и вы поймете, что я имею в виду
  • Я заметил, что вышеупомянутые комментарии подталкивают Эрланга на том основании, что будет полезно выучить функциональный язык программирования. Хотя я согласен, что важно расширить свой набор навыков и получить один из них под свой пояс, вы не должны основывать проект на том факте, что вы хотите изучить новый стиль программирования
  • С другой стороны, Javascript уже в парадигме, в которой вы чувствуете себя комфортно писать! Кроме того, это javascript, поэтому, когда вы пишете код на стороне клиента, он будет выглядеть и чувствовать себя согласованным.
  • узла уже выкачало тонны модулей ! Есть модули для redis, mongodb, couch и что там у вас. Еще один хороший модуль для изучения - Экспресс (например, Синатра для узла)

Посмотрите видео в блоге Yahoo от Райана Даля, парня, который на самом деле написал ноду. Я думаю, это поможет вам лучше понять, где находится узел и куда он направляется.

Имейте в виду, что узел все еще находится на поздних стадиях разработки, и поэтому претерпел немало изменений - изменений, которые нарушили предыдущий код. Тем не менее, предположительно, это тот момент, когда вы можете ожидать, что API не изменится слишком сильно. Поэтому, если вы ищете что-то веселое, я бы сказал, что node - отличный выбор.

15 голосов
/ 25 июня 2010

Я давний программист на Erlang, и этот вопрос побудил меня взглянуть на node.js.Это выглядит чертовски хорошо.

Похоже, вам нужно порождать несколько процессов, чтобы использовать преимущества нескольких ядер.Я не вижу ничего о настройке сродства процессора, хотя.Вы можете использовать набор задач в Linux, но, вероятно, его следует параметризовать и установить в программе.

Я также заметил, что поддержка платформы может быть немного слабее.В частности, похоже, что вам нужно будет запустить под Cygwin для поддержки Windows.

Хорошо выглядит.


Редактировать

Node.js теперь имеет встроенную поддержку Windows.

9 голосов
/ 25 июня 2010

Хотя я лично пойду на Эрланга, я признаю, что немного склонен к JavaScript. Мой совет, чтобы вы оценили несколько баллов:

  1. Вы повторно используете существующий код на любом из этих языков (как с точки зрения исходного кода, так и опыта программиста!)
  2. Нужны ли вам / нужны оперативные обновления без остановки приложения (в этом случае Erlang побеждает по умолчанию - его среда выполнения была разработана для этого случая, а OTP содержит все необходимые инструменты)
  3. Насколько велик ожидаемый трафик с точки зрения отдельных параллельных операций, а не пропускной способности?
  4. Насколько "параллельны" операции, которые вы выполняете для каждого запроса?

Erlang имеет действительно хорошо настроенную параллельную распределенную систему параллелизма и прозрачности сети. В зависимости от того, чем конкретно является проект, доступность зрелой реализации такой системы может перевесить любые проблемы, связанные с изучением нового языка. Есть также два других языка, которые работают на Erlang VM, которые вы можете использовать, Ruby / Python-подобные Reia и Lisp-Flavored Erlang .

Еще один вариант заключается в использовании обоих, особенно с использованием Erlang в качестве своего рода "хаба". Я не уверен, что Node.js имеет систему интерфейса внешних функций, но если он есть, Erlang имеет библиотеку C для внешних процессов для взаимодействия с системой, как любой другой процесс Erlang.

9 голосов
/ 14 июня 2010

Я смотрю на те же две альтернативы, которые вы есть, для нескольких проектов.

Пока что лучшая бритва, с которой я столкнулся, чтобы решить между ними для данного проекта, - нужно ли мне использовать Javascript. Одна существующая система, которую я хочу перенести, уже написана на Javascript, поэтому ее следующая версия, скорее всего, будет сделана в node.js. Другие проекты будут реализованы в некоторой веб-среде Erlang, потому что нет существующей базы кода для миграции.

Другое соображение заключается в том, что Erlang масштабируется намного дальше нескольких ядер, он может масштабироваться до целого центра обработки данных. Я не вижу встроенного механизма в node.js, который позволял бы мне отправлять другому JS-процессу сообщение, не заботясь о том, на каком компьютере он находится, но он встроен прямо в Erlang на самых низких уровнях. Если ваша проблема недостаточно велика для того, чтобы требовать нескольких компьютеров, или если для этого не требуется нескольких взаимодействующих процессов, это преимущество вряд ли будет иметь значение, поэтому вы должны его игнорировать.

Эрланг - действительно глубокий бассейн, в который можно погрузиться. Я бы предложил сначала написать автономную функциональную программу, прежде чем начинать создавать веб-приложения. Еще более простой первый шаг, поскольку Javascript, похоже, вас устраивает, состоит в том, чтобы попробовать программировать JS в более функциональном стиле. Если вы используете jQuery или Prototype, вы уже пошли по этому пути. Попробуйте отскочить между чисто функциональным программированием на Erlang или одним из его родственников (Haskell, F #, Scala ...) и функциональным JS.

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

5 голосов
/ 07 августа 2011

Похоже, что Erlang лучше работает при развертывании на относительно недорогом сервере (412-ядерная виртуальная машина AMD с тактовой частотой 512 МБ и частотой 2,4 ГГц). Это опыт SyncPad по сравнению реализаций Erlang и Node.js их серверного приложения виртуальной доски.

4 голосов
/ 13 сентября 2015

Есть еще один язык на той же виртуальной машине, что и erlang -> Эликсир

Это очень интересная альтернатива Erlang, посмотрите этот.

Такжена нем есть быстрорастущий веб-фреймворк -> Phoenix Framework

3 голосов
/ 15 февраля 2015

WhatsApp никогда не сможет достичь уровня масштабируемости и надежности без erlang

0 голосов
/ 09 августа 2017

Я предпочитаю Эрланг над Узлом.Если вы хотите параллелизма, Node может быть заменен на Erlang или Golang из-за их легковесных процессов.

Erlang не легок в изучении, поэтому требует больших усилий, но его сообщество активно, поэтому можно получить помощь отэто единственная причина, по которой люди предпочитают Node.

...