У меня есть много документов, в которых говорится, что основным преимуществом node.js http-сервера является назначенная io-архитектура, но Nginx также имеет значение io, поэтому в чем преимущество использования node.js + node http server OVER php или другого языка с Nginx?
В основе любого ответа должно быть утверждение «это зависит от того, что вы пытаетесь сделать». Так, например, вы можете попытаться …
Общепринято считать, что нужно выбрать правильные технологии для решения проблемы в руке – любая дискуссия о преимуществах объединения одной технологии с другой, независимо от того, по сути ли она обрабатывает событие IO или нет, без контекста будет иметь ограниченное значение в любой процесс принятия решений.
Еще одним очень важным фактором в принятии решений для вашего технологического стека являются навыки и опыт, доступные для достижения целей проекта.
Однако…
Используя все технологии, на которые вы ссылаетесь, я приведу несколько примеров проблем, которые, как мы считаем, решили и почему были выбраны определенные конфигурации:
PHP + Nginx
Да, PHP блокирует, но это не помеха для Facebook, а другие используют его в качестве основного языка веб-приложений. В более традиционном стеке LAMP, являющемся Apache, у вас есть хорошо известная и долговременная проблема, которая может возникнуть в условиях высокого трафика, где вы могли бы создать корреляцию 1 к 1 между входящими в Apache веб-соединениями и подключениями к База данных. Если вы ожидаете, что будете обслуживать более 1000 одновременных клиентов, а ваша БД имеет ограничение на 1000 соединений, я ожидаю, что у вас возникнут трудности.
Такое голодание ресурса создает переломный опыт для пользователей в перегруженных условиях.
Nginx в этой ситуации может дать вам больше шансов для вашего доллара, так как событие IO отменяет связь между веб-запросом и исходящим соединением базы данных PHP. Там есть много литературы, чтобы подтвердить это. Имейте в виду, что это не по волшебству – это зависит от того, как вы настраиваете NGinx и PHP – вы можете легко повесить себя, оставив включенным по умолчанию.
Предполагая, что продуманная конфигурация находится на месте, событие ввода-вывода NGinx имеет чистый эффект запросов буферизации, обрабатывая их на PHP с той скоростью, с которой может справиться база данных.
Приложения PHP широко используют такие кэши, как Memcached, для дальнейшей поддержки больших объемов в системах с высокой прочностью.
Node.js (чистый HTTP)
Наша причина выбора Node.js для поддерживаемого производственного решения
Новизна узла и тонкость его концепций программирования IO означали, что мы несколько раз нарушали ситуацию, и нам потребовалось больше времени, чтобы получить окончательное решение в квадрате, чем если бы мы придерживались PHP.
Рамки для веб-приложений несколько в зачаточном состоянии
Учитывая, насколько молоды они все, они все еще очень много работают. В зависимости от того, чего вы пытаетесь достичь для проекта, они могут служить вам хорошо или сократить время и усилия при их изучении.
Например, в Express.js, простых вещах, таких как работа с заголовками кеша HTTP, GZIPing контента не является полностью стандартным, поэтому, если этот материал необходим, вам придется начинать делать заказные решения или искать в другом месте.
Ничто не является основанием для установки или приложения Node.js, созданного с его помощью, что обеспечивает его запуск на уровне выполнения, в отличие от NGinx или Apache. Это означает, что вам нужно выяснить некоторые решения для управления автозапуск приложения при перезагрузке и другие восстановления, используя что-то в дополнение к Node.js. (Мы используем Monit)
Node.js + NGinx
Вы делаете ставку, почему бы и нет. NGinx более зрелый, так как нам нужно прекратить SSL-соединения, прежде чем доводить их до Node.js, вот что мы сделали. Дополнительным преимуществом является то, что теперь NGinx может проходить через GZIP-контент.
Этого недостаточно, если один компонент не блокирует. Все должно быть для того, чтобы все было неблокирующим. Если блокируется только одна вещь, все блокируется.
Даже в Node.JS ваше приложение все еще может блокироваться, даже если Node.JS сам по себе не является: если вы блокируете файловую систему или доступ к БД (по какой-либо причине), она все равно будет блокироваться.
Как PS: Если что-то блокирует, это не значит, что это плохо. Так что это не аргумент для или против Node.JS. Для некоторых вещей вам действительно нужны неблокирующие приложения, и для этого вам следует использовать Node.JS, но для большинства приложений PHP – лучший выбор (из-за большей поддержки и интеграции сообщества).
PHP блокируется, а node.js – нет. Не имеет значения, имеет ли nginx почти ту же архитектуру, что и node.js, поскольку PHP по-прежнему остается блокирующим.
Зависит от вашей заявки:
Краткое видео на узле js: link
Что-то, что делает его лучше:
Он использует javascript, обеспечивает лучшее повторное использование кода между сервером и клиентской стороной.
Узел Js сам по себе не блокирует.