Мне действительно нравятся эти инструменты когда дело доходит до уровня параллелизма, который это может обработать.
Erlang похож на намного более стабильное решение, но требует намного большего количества изучения и большого дайвинга в функциональную парадигму языка. И похоже, что Erlang делает его намного лучше когда дело доходит до много центральных процессоров ядер (зафиксируйте меня, если я неправ).
Но который я должен выбрать? Какой лучше в короткой/долгосрочной перспективе?
Моя цель состоит в том, чтобы изучить инструмент, который делает масштабирование моих веб-проектов при высокой загрузке легче, чем традиционные языки.
Я бы попробовал Erlang. Несмотря на то, что это будет более крутая кривая обучения, вы получите от нее больше, поскольку вы будете изучать функциональный язык программирования. Кроме того, поскольку Erlang специально разработан для создания надежных систем с высокой степенью параллелизма, вы узнаете много нового о создании одновременно высокомасштабируемых сервисов.
Я ищу те же две альтернативы, что и вы, gotts, для нескольких проектов.
На данный момент лучшая бритва, которую я придумал, чтобы выбрать между ними для данного проекта, - это то, нужно ли мне использовать Javascript. Одна существующая система, которую я хочу перенести, уже написана на Javascript, поэтому ее следующая версия, скорее всего, будет создана в node.js. Другие проекты будут реализованы в некоторой веб-платформе Erlang, потому что нет существующей базы кода для миграции.
Еще одно соображение заключается в том, что Erlang масштабируется не только на несколько ядер, он может масштабироваться до всего центра обработки данных. Я не вижу встроенного механизма в node.js, который позволяет мне отправлять другому JS-процессу сообщение, не заботясь о том, на какой машине он находится, но он встроен прямо в Erlang на самых низких уровнях. Если ваша проблема недостаточно велика, чтобы требовать нескольких машин, или если она не требует нескольких взаимодействующих процессов, это преимущество вряд ли будет иметь значение, поэтому вам следует игнорировать его.
Erlang - действительно глубокая лужа, в которую можно погрузиться. Я бы посоветовал сначала написать автономную функциональную программу, прежде чем вы начнете создавать веб-приложения.Еще более простой первый шаг, поскольку вам кажется, что вы чувствуете себя комфортно с Javascript, - это попробовать программировать JS в более функциональном стиле. Если вы используете jQuery или Prototype, вы уже пошли по этому пути. Попробуйте переключаться между чисто функциональным программированием на Erlang или его аналогах (Haskell, F #, Scala ...) и функциональным JS.
Когда вы освоитесь с функциональным программированием, поищите одну из многих веб-фреймворков Erlang; вам, вероятно, не следует писать свое приложение напрямую для чего-то низкоуровневого, например inets
на этой поздней стадии. Взгляните, например, на Азот .
Я давний программист на Erlang, и этот вопрос побудил меня взглянуть на node.js. Выглядит чертовски хорошо.
Похоже, что вам нужно создать несколько процессов, чтобы использовать преимущества нескольких ядер. Однако я ничего не вижу о настройке сродства процессора. Вы можете использовать набор задач в Linux, но он, вероятно, должен быть параметризован и установлен в программе.
Я также заметил, что поддержка платформы может быть немного слабее. В частности, похоже, что вам нужно будет запустить Cygwin для поддержки Windows.
Хотя выглядит неплохо.
Node.js теперь имеет встроенную поддержку Windows.
Хотя я лично выбрал бы Erlang, я признаю, что немного предубежден против JavaScript. Я советую вам оценить несколько моментов:
Erlang имеет действительно отлаженную параллельную работу и прозрачную для сети параллельную распределенную систему. В зависимости от того, что именно представляет собой проект, наличие зрелой реализации такой системы может перевесить любые проблемы, связанные с изучением нового языка. Есть также два других языка, которые работают с Erlang VM, которые вы можете использовать, Ruby / Python-подобный Reia и Lisp-Flavored Erlang .
Еще один вариант - использовать оба, особенно с использованием Erlang как своего рода «концентратора». Я не уверен, есть ли в Node.js система интерфейса внешних функций, но если она есть, в Erlang есть библиотека C для внешних процессов, которые взаимодействуют с системой, как и любой другой процесс Erlang.
Я не могу говорить за Erlang, но несколько вещей, которые не были упомянуты о node:
Посмотрите видео в блоге yahoo от Райана Дала, парня, который на самом деле написал node. Я думаю, это поможет вам лучше понять, на каком этапе находится node и куда он движется.
Имейте в виду, что node все еще находится на поздних стадиях разработки, и поэтому претерпевает довольно много изменений - изменений, которые сломали более ранний код. Однако, предположительно, он находится на той стадии, когда можно ожидать, что API не будет меняться слишком сильно. Так что если вы ищете что-то веселое, я бы сказал, что node - отличный выбор.