Czy Node.js faktycznie zwiększa skalowalność?

21

Czytałem o problemie z C10K, a na szczególną uwagę zasługuje ta część, która odnosi się do asynchronicznego I / O serwera. http://www.kegel.com/c10k.html#aio

Wierzę, że to w zasadzie podsumowuje to, co robi Node.js na serwerze, pozwalając wątkom przetwarzać żądania użytkowników, polegając na przerwaniach I / O (zdarzeniach) w celu powiadamiania wątków o zakończonych zadaniach, a nie tym, że wątek jest odpowiedzialny za pełne zadanie procesora. Wątek może zająć się innymi rzeczami (nieblokującymi) i być powiadamiany o zakończeniu zadania (np. Znalezieniu pliku lub skompresowaniu wideo).

Oznacza to następnie, że wątek jest bardziej „dostępny” dla gniazd, a zatem dla użytkowników na serwerze.

Potem znalazłem to: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html

Autor tutaj twierdzi, że chociaż platforma sterowana zdarzeniami (przerwane wątki) może zwolnić wątki, to tak naprawdę nie zmniejsza nakładu pracy procesora! Uzasadnieniem jest to, że jeśli, powiedzmy, użytkownik zażąda skompresowania przesłanego filmu, procesor nadal musi wykonać tę pracę i będzie blokował się podczas jej wykonywania (dla uproszczenia, zapomnijmy o paralelności tutaj - chyba że wiedzieć lepiej!).

Jestem prostym programistą, nie jestem administratorem serwera ani nic takiego. Chciałbym tylko wiedzieć: czy Node.js jest prezentem od bogów „przetwarzania w chmurze”, czy to wszystko jest na gorącym powietrzu i nie zaoszczędzi czasu i / lub pieniędzy firmom dzięki poprawie skalowalności?

Wielkie dzięki.

Alex
źródło
12
Po pierwsze ted jest trollem, po drugie node.js jest przeznaczony dla aplikacji związanych z IO, a nie aplikacji związanych z procesorem. To, czego chcesz, to połączenie tych dwóch. Wszystko związane z procesorem przechodzi w nowy wątek / proces. Wszystko, co dotyczy operacji we / wy, przechodzi w pętlę zdarzeń.
Raynos
1
+! Ten facet jest zdecydowanie trollem.
Patrick Hughes,
Zależy to od tego, co porównasz - jeśli nadal używasz Apache (z jakiegoś powodu) - wtedy Węzeł jest darem od bogów, ale jeśli porównasz go z Nginx - ulepszenia są znacznie mniej drastyczne, a Węzeł jest jeszcze wolniejszy. (dziesięć razy wolniej, 2ms vs 20ms, aby wygenerować odpowiedź, ALE w naszych testach, Nginx dawał 504 pod umiarkowanie dużym obciążeniem, a Node dawał normalne odpowiedzi).
c69,
Teraz, kiedy o tym wspominasz, troll jest wyraźnie trollem. @ c69 to dobra informacja, wielkie dzięki.
Alex
Twój link „prosta rozmowa na temat pętli zdarzeń” już nie działa.
Robert Harvey

Odpowiedzi:

20

Oczywiście każda praca związana z procesorem będzie wykorzystywać procesor. Będzie blokować procesor w dowolnym języku lub frameworku, w którym go napiszesz.

Node.js jest świetny, gdy masz pracę związaną z We / Wy, a nie procesor. Nie podnosiłbym ciężkiego podnoszenia w Węźle, choć da się to zrobić. Node.js rozwiązuje prawdziwe problemy, a nie fikcyjne lub wymyślone, takie jak serwery liczb Fibonacciego . To nie jest „gorące powietrze”.

Josh K.
źródło
Po prostu sprawdzam niektóre testy porównawcze i rzeczywiście wydaje się to znacznie szybsze w wyświetlaniu stron: zgadzaj.com/ ... .. Chyba właśnie o to mi chodziło ...
Alex
3
@AlexW: Dobrym punktem na temat tych testów porównawczych jest to, że zasadniczo podajesz treść statyczną. Zobacz mój kawałek Millions of Hits a Day . Rozbudowanie interpretera PHP do tego jest marnotrawstwem. Spójrz na coś w rodzaju statycznego węzła do udostępniania katalogów plików.
Josh K
@AlexW, aby przypomnieć, że zgadzaj.com/... używa node.js 0.1.103, który jest już stary !!
Samyak Bhuta
4

Chociaż dokument C10K jest nieco nieaktualny w odniesieniu do szczegółów implementacji, współbieżność oparta na zdarzeniach (model reaktora) wciąż jest pod pewnymi względami lepsza niż harmonogram wyprzedzający. Na przykład model planowania zapobiegawczego może planować wątki, gdy są zablokowane we / wy. Dzięki temu węzeł (i inne narzędzia, takie jak Ruby's Event Machine i Python's Twisted) mogą lepiej wykorzystywać dostępne cykle, spędzając więcej czasu na prawdziwej pracy, a mniej na blokowaniu czasu.

Rein Henrichs
źródło
-1

Wielowątkowość wciąż zwiększa wydajność. Oryginalne wyjaśnienie jest idiotyczne, ponieważ nie uwzględnia istnienia wielu rdzeni. W momencie, gdy masz więcej niż jeden rdzeń, wątki nie są już wątkami. Są hipertekstami. Każda aplikacja intensywnie wykorzystująca wątek skorzysta z niej więcej niż jedna aplikacja wątkowa.

aanand_ub
źródło
2
Jednak tak naprawdę nie wyjaśnia to zapału Node.JS. Podstawową zaletą Node.JS jest jego zdolność do szybkiego obsługiwania i wysyłania wielu żądań z jednego wątku, a nie do skutecznego radzenia sobie z dużymi obciążeniami w tle, których odpowiedź nie rozwiązuje.
Robert Harvey
Podstawową zaletą node.js jest posiadanie jednego języka dla frontonu i backendu. Wszystkie te inne roszczenia są po prostu puchate, aby wydały się ważniejsze.
whatsisname
2
Jednowątkowa współbieżność @whatsisname jest ogromną korzyścią, znacznie większą niż moim zdaniem posiadanie jednego języka.
pllee