Мне очень нравятся эти инструменты, когда дело касается уровня параллелизма, с которым они могут справиться.
Erlang / OTP выглядит гораздо более стабильным решением, но требует гораздо большего изучения и глубокого погружения в парадигму функционального языка. И похоже, что Erlang / OTP делает его намного лучше, когда речь идет о многоядерных процессорах (поправьте меня, если я ошибаюсь).
Но что мне выбрать? Какой из них лучше в краткосрочной и долгосрочной перспективе?
Моя цель - изучить инструмент, который упрощает масштабирование моих веб-проектов при высокой нагрузке по сравнению с традиционными языками.
concurrency
erlang
multicore
node.js
user80805
источник
источник
Ответы:
Я бы попробовал Erlang. Несмотря на то, что это будет более крутая кривая обучения, вы получите от нее больше, поскольку вы будете изучать функциональный язык программирования. Кроме того, поскольку Erlang специально разработан для создания надежных систем с высокой степенью параллелизма, вы узнаете много нового о создании одновременно высокомасштабируемых сервисов.
источник
Я не могу говорить от имени Erlang, но кое-что, что не упоминалось об узле:
Посмотрите видео в блоге yahoo от Райана Даля, парня, который на самом деле написал node. Я думаю, это поможет вам лучше понять, где находится узел и куда он движется.
Имейте в виду, что узел все еще находится на поздних стадиях разработки, поэтому претерпел довольно много изменений - изменений, которые нарушили предыдущий код. Однако, предположительно, это тот момент, когда вы можете ожидать, что API не изменится слишком сильно. Так что, если вы ищете что-то забавное, я бы сказал, что node - отличный выбор.
источник
Я давний программист на Erlang, и этот вопрос побудил меня взглянуть на node.js. Выглядит чертовски хорошо.
Похоже, что вам нужно создать несколько процессов, чтобы использовать преимущества нескольких ядер. Однако я ничего не вижу о настройке сходства процессора. Вы можете использовать набор задач в Linux, но он, вероятно, должен быть параметризован и установлен в программе.
Я также заметил, что поддержка платформы может быть немного слабее. В частности, похоже, что вам нужно будет запустить Cygwin для поддержки Windows.
Хотя выглядит неплохо.
редактировать
Node.js теперь имеет встроенную поддержку Windows.
источник
Я смотрю на те же две альтернативы, что и вы, для нескольких проектов.
Пока что лучшая бритва, которую я придумал, чтобы выбрать между ними для конкретного проекта, - это то, нужно ли мне использовать Javascript. Одна существующая система, которую я хочу перенести, уже написана на Javascript, поэтому ее следующая версия, вероятно, будет создана в node.js. Другие проекты будут реализованы в некоторой веб-платформе Erlang, потому что нет существующей базы кода для миграции.
Другое соображение заключается в том, что Erlang масштабируется не только на несколько ядер, он может масштабироваться до всего центра обработки данных. Я не вижу встроенного механизма в node.js, который позволяет мне отправлять другому JS-процессу сообщение, не заботясь о том, на какой машине он находится, но он встроен прямо в Erlang на самых низких уровнях. Если ваша проблема недостаточно велика, чтобы требовать нескольких машин, или если она не требует нескольких взаимодействующих процессов, это преимущество вряд ли будет иметь значение, поэтому вам следует игнорировать его.
Erlang - действительно глубокий бассейн, в который стоит погрузиться. Я бы предложил сначала написать автономную функциональную программу, прежде чем вы начнете создавать веб-приложения. Еще более простой первый шаг, поскольку вам кажется, что вам комфортно работать с Javascript, - это попробовать программировать JS в более функциональном стиле. Если вы используете jQuery или Prototype, вы уже пошли по этому пути. Попробуйте переключаться между чисто функциональным программированием на Erlang или одном из его аналогов (Haskell, F #, Scala ...) и функциональным JS.
Когда вы освоитесь с функциональным программированием, поищите одну из многих веб-фреймворков Erlang; вам, вероятно, не следует писать свое приложение напрямую для чего-то низкого уровня, например,
inets
на этой поздней стадии. Взгляните, например, на что-нибудь вроде азота .источник
Хотя я лично выбрал бы Erlang, я признаю, что немного предвзято отношусь к JavaScript. Я советую вам оценить несколько пунктов:
Erlang имеет действительно отлаженную параллельную работу и прозрачную для сети параллельную распределенную систему. В зависимости от того, что именно представляет собой проект, наличие зрелой реализации такой системы может перевесить любые проблемы, связанные с изучением нового языка. Есть также два других языка, которые работают с Erlang VM, которые вы можете использовать, Ruby / Python-like Reia и Lisp-Flavored Erlang .
Еще один вариант - использовать оба, особенно когда Erlang используется как своего рода «хаб». Я не уверен, есть ли в Node.js система интерфейса внешних функций, но если она есть, в Erlang есть библиотека C для внешних процессов, которые взаимодействуют с системой, как и любой другой процесс Erlang.
источник
Похоже, что Erlang лучше подходит для развертывания на сервере относительно низкого уровня (512 МБ 4-ядерной виртуальной машины AMD 2,4 ГГц). Это из опыта SyncPad по сравнению реализаций Erlang и Node.js их серверного приложения виртуальной доски.
источник
На той же виртуальной машине есть еще один язык, что и erlang -> Elixir
Это очень интересная альтернатива Erlang, посмотрите эту.
Также у него есть быстрорастущий веб-фреймворк на его основе-> Phoenix Framework
источник
WhatsApp никогда не смог бы достичь уровня масштабируемости и надежности без erlang https://www.youtube.com/watch?v=c12cYAUTXXs
источник
Я предпочитаю Erlang Node. Если вам нужен параллелизм, Node можно заменить на Erlang или Golang из-за их легких процессов.
Erlang нелегко изучить, поэтому требуется много усилий, но его сообщество активно, поэтому вы можете получить от этого помощь, это только причина, по которой люди предпочитают Node.
источник