Использование 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, время ожидания цикла будет увеличиваться, и приложение не сможет ответить на любые другие запросы.