Может ли Node.js полностью заменить такие решения, как Apache или NGINX?
О развертывании приложения Node.js я видел множество учебных пособий, показывающих, как оно разворачивается рядом с Nginx, с более или менее приятными приемами, позволяющими двум работать вместе (и раздражающими вещами, такими как Nginx, не поддерживающий WebSockets)., Это кажется мне немного сложным...
Почему все делают такие настройки? Разве развертывание Nginx, когда у вас есть Node.js, дает какое-то преимущество? Не можете ли вы обслуживать статические файлы с помощью Node.js?
Я написал много приложений на Django, и доктор говорит, что вы не должны использовать Django для обслуживания статических файлов, потому что он не оптимизирован для этого и так далее... поэтому я подумал, может быть, в этом причина.
3 ответа
Ну, некоторые люди не против использования Node вместо nginx. Некоторые облака, такие как dotCloud или Nodejistu, используют шлюзы, полностью написанные на Node.js. Главным образом, чтобы иметь возможность обрабатывать веб-сокеты. Но также потому, что Node.js чертовски быстр.
Вот шлюз dotCloud, который был недавно открыт с открытым исходным кодом https://github.com/dotcloud/hipache
И Apache, и NGINX - это полностью разработанные веб-серверы, предлагающие множество модулей и сервисов из коробки. Они считаются надежными и доказали свою стабильность в течение нескольких лет.
Имея такого рода доступные решения, нет необходимости заново изобретать колесо. Может быть более выгодно реализовать балансировщик нагрузки и маршрутизацию с NGINX, не выставлять NodeJS извне и просто запускать его на локальном хосте.
NodeJS нельзя считать серверным программным обеспечением, а просто движком JavaScript плюс библиотеки / модули. Тот факт, что он широко используется для сценариев сервера, не делает его веб-сервером.
Если вы решили не обращать внимания на вышесказанное и полностью перейти на NodeJS, я предлагаю вам подумать о поддержке такого решения. Регистрация, запуск / выключение скриптов и мониторинг могут сделать задачу более сложной, чем кажется.
Более того, многочисленные библиотеки, написанные для NodeJS, имеют тенденцию ломаться с новыми поставленными версиями, поскольку NodeJS вносит критические изменения. Считайте, что это цена за отсутствие зрелости. Если вы рискуете и не боитесь проблем, выбирайте NodeJS.
Последнее замечание: статические файлы могут обслуживаться с NodeJS. Ваши сценарии могут прочитать и вытолкнуть.
Обновление: если вы решили использовать Node.js, подумайте об использовании фреймворка Express.js.
Я предпочитаю использовать только node.js для всего этого. Причина этого в том, что многие приложения-узлы имеют встроенные файловые серверы или зависят от того, который обслуживает их файлы. Таким образом, каждое приложение может использовать файловый сервер, который подходит лучше всего, и может настроить его в соответствии со своими потребностями.
Кроме того, вы теряете немного производительности, когда вам приходится перенаправлять каждый отдельный запрос от Apache/NGINX к node.js. Гораздо проще позволить узлу обрабатывать запросы самостоятельно.