2013-06-05 14 views
21

skalowalny, co to oznacza? Jaka część serwera node.js jest skalowalna. Czytałem, że jest to technologia jednowątkowa, która nie jest odpowiednia dla aplikacji, które wymagałyby dużej ilości zasobów procesora. Fakty te nie pasują do skalowalności, więc co to oznacza?Dlaczego program Node.js jest skalowalny?

+0

Duplikat: [Scaling node.js] (http://stackoverflow.com/questions/4710420/scaling-node-js). –

+0

@Jason Nie szukam odpowiedzi na kodowanie techniczne – vuvu

+1

Ten post podkreśla skalowalność, w tym równoważenie obciążenia i redis. –

Odpowiedz

15

Jądro w tym węźle działa w trybie pojedynczego wątku, ale wiele rzeczy, które wywołujesz w węźle - takich jak sieć lub plik - uruchamiane w wątkach w tle. Zobacz ten post za podstawowy przegląd: Node is not single threaded

Jeśli potrzebujesz piaszczysty szczegóły, należy spojrzeć na libuv który jest „magia” kawałek konwersji wątki w przypadku pętli: http://nikhilm.github.io/uvbook/basics.html#event-loops

Dodatkowo, jeśli trzeba aby zrobić coś bardzo obciążającego procesor w samym węźle, możesz łatwo wysłać to do procesu potomnego - zobacz http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options, aby uzyskać szczegółowe informacje:

+0

Czy operacje takie jak odczytywanie z bazy danych lub ich aktualizacja, blokowanie czy blokowanie? To jest w.r.t do RDBMS. Czy sugerujesz Węzeł dla takich aplikacji? – LearningToCode

2

jest skalowalny ze względu na równoważenie obciążenia. Zasadniczo możesz mieć wiele zadań dla węzła do przetworzenia i może obsłużyć go bez znacznego obciążenia. To sprawia, że ​​jest skalowalny.

+6

W jaki sposób jest realizowane równoważenie obciążenia? – vuvu

3

Czy nie jest to bardziej skalowalne "per se". To wszystko, co robisz, to skalowalność (I/O) bez konieczności robienia czegoś specjalnego.

I/O jest bezpieczniejsze i łatwiejsze do wykonania równolegle, ponieważ zwykle nie udostępnia żadnych danych między wątkami wykonawczymi. Node.js pozwala to zrobić za pomocą programowania zdarzeń, który jest prosty, elegancki i łatwy w użyciu. Jest starym i sprawdzonym paradygmatem programowania, używanym od lat przez GUI i inne graficznie intensywne aplikacje, takie jak gry.

W rzeczywistości jest mniej skalowalny niż języki pełnoprawne, takie jak C++, c, java, itp., Które mogą znacznie lepiej skalować przy użyciu pełnej wielowątkowości. Umożliwia to skalowanie procesora, ale także otwiera puszkę z robakami. Aby współużytkować procesor, trzeba udostępniać dane, i to jest inna historia (semafory, blokady, itp.)

Możesz zrobić to samo, co plik node.js z dowolnym z powyższych języków, ale nie jest on częścią samego języka, więc musisz przetasować swój własny lub skorzystać z bibliotek, które go dostarczają. To powiedziawszy, nie jest takie trudne, ale zdecydowanie trudniejsze niż w node.js.

Większość usług internetowych jest związana z IO, więc Node.js pasuje dobrze, aw większości przypadków jest OK. Ale gdy zaczniesz intensywnie pracować z procesorem, zdarzenia nie będą obsługiwane i wszystko się zatrzyma. W takim przypadku lepiej użyć innego języka. W tym przypadku nie ma naprawdę dobrego rozwiązania w Węzłach. Możesz odradzać wiele procesów, ale wtedy nie będziesz mieć możliwości udostępniania danych między nimi. Bez współdzielenia danych nie ma możliwości efektywnego skalowania procesora, więc lepiej nie próbuj.

Użyj Node.js dla IO i trochę lepiej dopasowanego języka z odpowiednią wielowątkowością dla intensywnej pracy procesora.

0

Wszystkie interfejsy API węzła są napisane w taki sposób, że obsługują wywołania zwrotne.

Na przykład funkcja odczytu pliku może rozpocząć odczytywanie pliku i natychmiastowo przekazać sterowanie do środowiska wykonawczego, aby można było wykonać następną instrukcję. Po zakończeniu operacji wejścia/wyjścia pliku wywoła funkcję zwrotną, przekazując funkcję zwrotną, zawartość pliku jako parametr. Tak więc nie ma blokowania ani czekania na File I/O. Dzięki temu Node.js jest wysoce skalowalny, ponieważ może przetwarzać dużą liczbę żądań bez czekania, aż jakakolwiek funkcja zwróci wynik. - Punkt samouczek.

Powiązane problemy