Использование NodeJS для большого проекта

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

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

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

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

Ответ 1

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

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

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

Лучше всего использовать интерфейс front-end/API, который связан с I/O (большинство серверов front-end/api). Если у вас есть потребности в вычислительной базе (обработка и т.д.), Она может быть сопряжена с другими технологиями (ядро ядра С#, go, Java и т.д.)

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

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

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

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

Что касается "большого проекта", то, что я нашел критическим для разумного развития, является:

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

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

  • Инструмент. Множество опций, но я нашел лучшее, это Typescript (ES6/7 сегодня), VS Code (intellisense), Mocha (модульное тестирование).

  • Инструментарий/Ведение журнала. Получение информации о вашем приложении с помощью трассировки и инструментария имеет решающее значение.

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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