2012-02-29 2 views
37

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

Из того, что я читал в Интернете, NodeJS - не лучший инструмент для использования, когда дело доходит до больших программ. Я столкнулся с следующим:

  • NodeJS работает на JavaScript, который работает на циклах событий, которые не очень эффективны при использовании в массовом порядке.
  • NodeJS может быть неблокирующим, но все запросы обрабатываются в пределах одного потока, так что это может стать причиной узкого места при обработке многих запросов.
  • NodeJS построен на собственном HTTP-сервере, поэтому для будущего обслуживания потребуется собственный гибрид sysadmin/Developer, чтобы заботиться о приложении.
  • Существует не так хорошо проверенное и разнообразное программное обеспечение, доступное для NodeJS, которое помогает вам создавать более крупное приложение.

Есть ли что-то, что мне не хватает? Является ли NodeJS настолько мощным, насколько это возможно?

+0

После работы над реальными проектами на некоторое время, я обновил свой ответ с последними результатами. – bryanmac

ответ

41

Является ли NodeJS хорошей каркасной/кодовой базой для большого серверного приложения?

Этот вопрос немного субъективен, но я включаю в себя фактические объективные моменты, которые решают реальные проблемы при работе с узлом в большом проекте.

Update после работы над проектом на некоторое время:

Лучше всего в качестве внешнего сервера конца/API, который ввод-вывод связанных/(самого переднего конца/API-сервера). Если у вас есть потребности в вычислительной базе (обработка и т. Д.), То она может быть сопряжена с другими технологиями (ядро ядра C#, go, Java и т. Д.)

Я создал этот проект в качестве примера, иллюстрирующего большинство точек - Сане Узел развития: https://github.com/bryanmacfarlane/sanenode

NodeJS не построен на вершине своего собственного сервера HTTP. Он построен поверх процессора javascript V8 chrome и не предполагает HTTP-сервера. Существует встроенный модуль http, а также популярный express web server, но есть также модули сокетов (а также socket.io). Это не просто сервер http.

Единственная нить не вызывает узкое место, потому что все операции ввода-вывода являются асинхронными. Эта ссылка хорошо объясняет это: http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/

Что касается программного модуля, вы можете выполнить поиск по адресу npm registry. Всегда смотрите на то, как многие другие люди используют его (загружает) и посещают репозиторий github, чтобы узнать, активно ли он поддерживается (или есть куча вопросов, которые никогда не привлекают внимания).

Что касается «большого проекта», что я нашел решающее значение для здравомыслящего развития:

  1. Compile поддержка времени (и IntelliSense): Найти проблемы при компиляции. Если вы не думаете, что вам нужно это, как я, когда я начал, вы передумаете после этого первого большого рефактора.

  2. Устранение обратного звонка Ад: Сохранение производительности, которая имеет решающее значение (отмечено выше), но исключает код обратного вызова. Используйте async/wait, чтобы написать линейный код и сохранить async perf. Интеграция с обещаниями, но гораздо лучше, чем использование обещаний.

  3. Инструментальное: Много вариантов, но я нашел лучшую Машинопись (ES6/7 сегодня), VS Code (IntelliSense), Мокко (модульное тестирование).

  4. Instrumentation/Logging: Очень важно знать о своем приложении с помощью трассировки и инструментария.

  5. Построить на хорошо проверенных фреймворках: Я использую экспресс в качестве примера, но это предпочтение, и есть другие.

+4

Это все очень хорошие моменты, однако вопрос был: * Является ли NodeJS хорошей основой/кодовой базой для большого серверного приложения? *. Это не отвечает на вопрос. – Maroshii

+2

@Maroshii - Это довольно субъективный и двусмысленный вопрос - я бы предложил закрыть, основанный только на этом вопросе. Но, в частности, он указал конкретные моменты, почему это может быть неприемлемым, и я обратился к этим вопросам. – bryanmac

+0

// если он активно поддерживается (или существует проблема с вопросом, который никогда не привлекает внимания). Эта часть действительно страшна: /, что произойдет, если техническое обслуживание инструмента прекратится в будущем:/ – AVI

15

Node.js - очень хороший инструмент для создания распределенных сетевых сервисов. Каков ваш масштабный дизайн приложений - это больше, чем вопрос «какие инструменты использовать». Многие люди используют node.js очень разнородным образом вместе с ruby, php, erlang, apache & nginx & HAproxy. Если вы не знаете, зачем вам нужен узел, вам, вероятно, это не нужно. Возможные причины считать узел:

  • вы хотите, чтобы общий код Javascript между сервером и клиентом
  • вы ожидаете высокой одновременно нагрузки (тысяч до сотен тысяч одновременных соединений на сервере)
  • вам (или вашей команды) является гораздо более опытным с JavaScript, чем с любыми другими доступным языком/рамками
  • , если one of 7600+ modules реализует большую часть требуемой функциональности
+3

+1 - особенно серверный и клиентский коды sharng. Очень удобно делиться библиотеками JavaScript (такими как проверка) между клиентом браузера и сервером (API REST и т. Д.). – bryanmac

+0

согласен с @bryanmac. Также распространять html-шаблоны для одностраничных приложений является удивительным. – Maroshii

8

Действительно NodeJs является мощным по-своему, Дополнительная информация,

  1. Вы можете запустить несколько экземпляров вашего приложения под балансом нагрузки для обработки массивного запроса.
  2. Выберите NodeJs, чтобы читать 2000 файлов вместо вычисления 20-го числа.
  3. Положите NodeJs на занятие чтением/записью в файлах или портах.
  4. Очень полезно, когда вам нужно транслировать ответ на несколько клиентов.
  5. Не заботьтесь о мертвой блокировке в NodeJs, но заботитесь о том, как часто вы делаете такую ​​же операцию.
  6. Самое главное, значения живут в двигателе V8 до тех пор, пока процесс не будет завершен. Будьте уверены, сколько строк кода вы собираетесь подавать в NodeJ.
2

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

9

Один «вопрос» с NodeJS заключается в том, что для создания большого приложения требуется дисциплина со стороны разработчика/команды.

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

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

Смежные вопросы