Node.js или Erlang

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

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

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

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

86
задан A. Levy 24 June 2010 в 20:37
поделиться

5 ответов

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

86
ответ дан 24 November 2019 в 08:00
поделиться

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

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

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

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

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

9
ответ дан 24 November 2019 в 08:00
поделиться

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

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

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

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


Edit

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

15
ответ дан 24 November 2019 в 08:00
поделиться

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

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

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

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

9
ответ дан 24 November 2019 в 08:00
поделиться

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

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

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

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

50
ответ дан 24 November 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: