Чи дійсно 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 від богів "хмарних обчислень" чи все це гаряче повітря, і насправді компанія не заощадить час та / або гроші, покращивши масштабованість?

Велике дякую.


12
По-перше, тед є троллем, по-друге, node.js призначений для програм, пов'язаних з IO, а не додатків, пов'язаних з процесором. Те, що ви хочете, - це поєднання двох. Все, що пов'язане з процесором, переходить у новий потік / процес. Все, що пов'язане з IO, відбувається у циклі подій.
Райнос

1
+! Цей хлопець, безумовно, троль.
Патрік Х'юз

Це залежить від того, з чим ви порівнюєте - якщо ви все-таки використовуєте Apache (чомусь) - тоді Node є даром богів, але якщо порівнювати його з Nginx - поліпшення набагато менш різкі, а Node - навіть повільніше. (в десять разів повільніше, 2 мс проти 20 мс для отримання відповіді, АЛЕ в наших тестах, Nginx давав 504 при помірно важкому навантаженні, а Вузло давав нормальну відповідь).
c69

Зараз ви це згадуєте, хлопці, троль хлопець - це явно троль. @ c69 це гарна інформація, дякую велике.
Алекс

Посилання "Пряма розмова про петлі подій" більше не працює.
Роберт Харві

Відповіді:


20

Звичайно, будь-яка робота, пов'язана з процесором, збирається використовувати процесор. Це блокує процесор будь-якою мовою чи рамкою, на якій ви пишете.

Node.js чудово підходить для роботи, пов'язаної з входом / виводом, а не з процесором. Я б не займався важким підйомом в Node, хоча це можна зробити. Node.js вирішує реальні проблеми, а не вигадані чи уявні, як-от сервери з числовими номерами . Це не "гаряче повітря".


Просто перевіряючи деякі орієнтири, і справді це здається набагато швидшим при обслуговуванні сторінок: zgadzaj.com/… .. Я думаю, це те, що я був після ...
Alex

3
@AlexW: Хорошим моментом щодо цих орієнтирів є те, що ви фактично подаєте статичний вміст. Дивіться твір " Мільйони хітів на день" . Спінінг інтерпретатора PHP - це відходи. Подивіться на щось на зразок вузлового статичного для обслуговування каталогів файлів.
Джош К

@AlexW, Просто нагадаю, що zgadzaj.com/… використовує node.js 0.1.103, який зараз старий !!
Сам’як Бхута

4

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


-1

Багатопоточність все ще підвищує продуктивність. Оригінальне пояснення є ідіотичним, оскільки не враховує існування декількох ядер. У момент, коли у вас є більше одного ядра, нитки вже не є потоками. Вони - гіпертоки. Будь-яке інтенсивне додаток для поточного потоку виграє від цього більше, ніж одна потокова програма.


2
Це насправді не пояснює захоплення Node.JS. Основною перевагою Node.JS є його здатність швидко обробляти та відправляти кілька запитів з однієї нитки, а не ефективно обробляти великі фонові навантаження, на які ваша відповідь не звертається.
Роберт Харві

Основна перевага node.js полягає в тому, щоб мати єдину мову для фронту та бекенда. Всі ці інші претензії є просто пухкими, щоб зробити їх більш важливими.
whatsisname

2
@whatsisname однопоточна одночасність - це величезна користь, набагато більша, ніж наявність однієї мови на мою думку.
pllee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.