Node.js подходит для создания большого веб-приложения для обмена файлами? - PullRequest
1 голос
/ 30 марта 2020

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

Ответы [ 2 ]

3 голосов
/ 30 марта 2020

Подходит ли Node.js для создания большого веб-приложения с общим доступом к файлам?

Да.

Современный node.js имеет несколько способов обработки ресурсоемких задач в наши дни, так что совет, возможно, немного устарел. Совет состоит в том, что он запускает ваш основной Javascript в одном потоке и использует асинхронный ввод-вывод, чтобы позволить одному потоку очень эффективно обрабатывать множество запросов с использованием асинхронного ввода-вывода.

Но , если некоторые из ваших обработчиков запросов используют много циклов ЦП, то происходит отключение события l oop.

Но современный node.js имеет возможность:

  1. Кластеризация с использованием встроенного модуля кластера , поэтому у вас есть несколько node.js процессов, принимающих запросы со сбалансированной нагрузкой, которые будут задействовать много процессоров.

  2. Используйте Рабочие потоки , чтобы запускать отдельные потоки, в которых вы можете запускать задачи с интенсивным использованием ЦП, а не блокировать главное событие. L oop.

  3. Создать несколько своего рода рабочая очередь, где вы можете использовать дополнительные процессы или рабочие потоки для перегрузки ЦП при работе в очереди. Я мог бы представить себе приложение для обработки изображений, которое делает это следующим образом.

В вашем случае приложение для обмена файлами, вероятно, даже не требует много ресурсов процессора, так как, скорее всего, основной лог c о том, кто может получить доступ к тому, что не требует интенсивной загрузки ЦП, а процесс обслуживания общих ресурсов полностью связан с вводом / выводом (что очень эффективно при node.js). Если, попав в разработку, вы где-то обнаружили узкое место с высокой загрузкой процессора, вы можете очень легко обойти его одним из вышеуказанных подходов.

И есть много способов горизонтального масштабирования node.js с кластеризацией на одном сервере или нескольких кластерах серверов. Если ваше приложение связано с вводом / выводом из-за всего общего содержимого, масштабирование, вероятно, в основном связано с пропускной способностью сети и масштабированием дискового ввода / вывода, а не с фактической логикой приложения c или процессором.

3 голосов
/ 30 марта 2020

Node.js имеет управляемую событиями архитектуру, то есть имеет встроенное событие l oop и API асинхронного ввода / вывода.

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

Когда в Node.js выполняется задача с интенсивным использованием ЦП, она блокирует событие l oop до его завершения. В течение этого времени программа не сможет обрабатывать новые входящие сообщения.

И наоборот, операциям ввода-вывода не требуется такая большая загрузка ЦП.

Поскольку, в общем, веб-приложения и общий доступ к файлам * включает в себя больше операций ввода-вывода, чем задачи с интенсивным использованием процессора (например, чтение файла с диска и отправка его содержимого через сетевой сокет), Node.js может быть хорошо подходит для создания большого веб-приложения для обмена файлами.

...