Node.js или Erlang

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

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

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

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

Ответ 1

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

Ответ 2

Я не могу говорить за Erlang, но несколько вещей, о которых не упоминалось о node:

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

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

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

Ответ 3

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

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

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

Выглядит неплохо.


Изменить

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 8

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

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

Кроме того, на нем есть быстро растущая веб-инфраструктура → Phoenix Framework

Ответ 9

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

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