Действительно ли Node.js увеличивает масштабируемость?

21

Я читал о проблеме C10K, и особое внимание уделено той части, которая относится к асинхронному серверу ввода-вывода. http://www.kegel.com/c10k.html#aio

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

Впоследствии это означает, что поток более «доступен» для сокетов и, следовательно, для пользователей на сервере.

Тогда я нашел это: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html

Автор здесь утверждает, что хотя управляемая событиями структура (прерванная многопоточность) может освободить потоки, она фактически не уменьшает объем работы, которую должен выполнять процессор! Обоснование здесь заключается в том, что если, скажем, пользователь запрашивает сжатие загруженного видео, ЦП все равно должен фактически выполнить эту работу и будет блокировать, пока это делает (для простоты, давайте забудем о параллелизме здесь - если вы не знаю лучше!).

Я простой программист, а не администратор сервера или что-то в этом роде. Мне просто интересно узнать: является ли Node.js даром богов «облачных вычислений» или это все горячая тема, и не будет ли экономить время и / или деньги компаний за счет улучшения масштабируемости?

Большое спасибо.

Alex
источник
12
Во-первых, ted - это тролль, во-вторых, node.js предназначен для приложений, связанных с вводом-выводом, а не приложений, связанных с процессором. То, что вы хотите, это комбинация двух. Все, что связано с процессором, переходит в новый поток / процесс. Все, что связано с IO, входит в цикл обработки событий.
Райнос
1
+! Этот парень определенно тролль.
Патрик Хьюз
Это зависит от того, что вы сравниваете - если вы все еще используете Apache (по какой-то причине) - тогда Node - это дар богов, но если вы сравните его с Nginx - улучшения гораздо менее радикальны, а Node еще медленнее. (в десять раз медленнее, 2 мс против 20 мс для генерации ответа, НО в наших тестах Nginx давал 504 при умеренно большой нагрузке, а Node давал нормальные ответы).
с69
Теперь вы упомянули это, ребята, парень-тролль явно тролль. @ c69 это хорошая информация, большое спасибо.
Алекс
Ваша ссылка "прямой разговор о событиях" больше не работает.
Роберт Харви

Ответы:

20

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

Node.js отлично подходит, когда у вас есть работа, связанная с вводом / выводом, а не с процессором. Я бы не стал делать тяжелую работу в Node, хотя это можно сделать. Node.js решает реальные проблемы, а не вымышленные или воображаемые, как серверы чисел Фибоначчи . Это не «горячий воздух».

Джош К
источник
Просто проверяя некоторые тесты, и на страницах обслуживания это выглядит намного быстрее: zgadzaj.com/… Я думаю, это то, чего я добивался ...
Алекс
3
@AlexW: Хорошим моментом в отношении этих тестов является то, что вы по сути обслуживаете статический контент. Посмотрите мою часть «Миллионы хитов в день» . Раскрутка интерпретатора PHP для этого - пустая трата времени. Посмотрите на что-то вроде node-static для обслуживания файловых каталогов.
Джош К
@AlexW, просто чтобы напомнить, что zgadzaj.com/… использует node.js 0.1.103, который сейчас старый !!
Самьяк Бхута
4

Хотя документ C10K несколько устарел в отношении деталей реализации, параллелизм на основе событий (модель реактора) все еще в некоторых отношениях превосходит упреждающее планирование. Например, модель с вытесняющим планированием может планировать потоки, пока они заблокированы IO. Это позволяет узлу (и другим инструментам, таким как Ruby's Event Machine и Python's Twisted) лучше использовать доступные циклы, тратя больше времени на реальную работу и меньше блокируя время.

Рейн Хенрикс
источник
-1

Многопоточность все еще повышает производительность. Оригинальное объяснение является идиотским, поскольку оно не учитывает существование нескольких ядер. В тот момент, когда у вас есть более одного ядра, потоки перестают быть потоками Это гиперпотоки. Любое поточно-интенсивное приложение получит от этого больше пользы, чем однопоточное.

aanand_ub
источник
2
Это на самом деле не объясняет пыл Node.JS. Основным преимуществом Node.JS является его способность быстро обрабатывать и отправлять несколько запросов из одного потока, а не эффективно обрабатывать тяжелые фоновые рабочие нагрузки, на которые не отвечает ваш ответ.
Роберт Харви
Основным преимуществом node.js является наличие единого языка для front и backend. Все эти другие заявления просто бесполезны, чтобы сделать их более важными.
whatsisname
2
Однопоточный параллелизм @whatsisname - это огромное преимущество, гораздо большее, чем, по моему мнению, наличие одного языка.
pllee