какие преимущества при использовании node.js + узел http-сервера поверх php / ruby ​​/ etc + nginx?

У меня есть много документов, в которых говорится, что основным преимуществом node.js http-сервера является назначенная io-архитектура, но Nginx также имеет значение io, поэтому в чем преимущество использования node.js + node http server OVER php или другого языка с Nginx?

В основе любого ответа должно быть утверждение «это зависит от того, что вы пытаетесь сделать». Так, например, вы можете попытаться …

  • Поддержка 10k одновременных клиентов в чате
  • Подавать 1M статические страницы / месяц
  • Предоставление CMS-функции пользователям 3k
  • Подавать простой сайт типа блога, используемый малым бизнесом
  • Поддержка системы с записью, такой как игра, с миллионами пользователей
  • Создайте веб-сайт потребительского банкинга
  • и т.д..

Общепринято считать, что нужно выбрать правильные технологии для решения проблемы в руке – любая дискуссия о преимуществах объединения одной технологии с другой, независимо от того, по сути ли она обрабатывает событие 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 для поддерживаемого производственного решения

  • Это не было критически важным (Node.js является новым, и поэтому вы не хотели бы запускать на нем свою банковскую систему)
  • Мы хотели что-то легкое
  • Мы хотели учиться и экспериментировать – обычно этот критерий не разрешен во многих бизнес-системах

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

Рамки для веб-приложений несколько в зачаточном состоянии

  • Express.js
  • Socketstream
  • Backbone.js
  • возможно, другие …

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

Например, в 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 сам по себе не блокирует.