Node.js или Erlang

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

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

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

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

9 ответов

Решение

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

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

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

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

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

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

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

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

Выглядит хорошо, хотя.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Также он имеет быстрорастущий веб-фреймворк на его основе-> http://phoenixframework.org/

WhatsApp никогда не сможет достичь уровня масштабируемости и надежности без эрланга https://www.youtube.com/watch?v=c12cYAUTXXs

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

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

Другие вопросы по тегам