O Node.js realmente aumenta a escalabilidade?

21

Eu tenho lido sobre o problema C10K e, principalmente, é a parte que se refere à E / S do servidor assíncrono. http://www.kegel.com/c10k.html#aio

Acredito que isso resume muito bem o que o Node.js faz no servidor, permitindo que os threads processem solicitações do usuário enquanto dependem de interrupções de E / S (eventos) para notificar os threads dos trabalhos concluídos, em vez de serem responsáveis ​​pelo trabalho completo da CPU. O thread pode continuar com outras coisas (sem bloqueio) e ser notificado sobre quando um trabalho é concluído (por exemplo, um arquivo é encontrado ou um vídeo é compactado).

Posteriormente, isso significa que um encadeamento está mais 'disponível' para soquetes e, portanto, para usuários no servidor.

Então eu encontrei o seguinte: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html

O escritor aqui afirma que, embora a estrutura orientada a eventos (encadeamento interrompido) possa liberar threads, na verdade não reduz a quantidade de trabalho que uma CPU precisa fazer! A lógica aqui é que, se, digamos, um usuário solicitar a compactação de um vídeo enviado, a CPU ainda precisará executar esse trabalho e estará bloqueando enquanto o faz (por uma questão de simplicidade, vamos esquecer o paralelismo aqui - a menos que você conhecer melhor!).

Eu sou um codificador direto, não um administrador de servidor ou algo assim. Só estou interessado em saber: o Node.js é um presente dos deuses da 'computação em nuvem' ou é tudo um ar quente, e na verdade não economiza tempo e / ou dinheiro das empresas, melhorando a escalabilidade?

Muito Obrigado.

Alex
fonte
12
Em primeiro lugar, ted é um troll, em segundo lugar, node.js é destinado a aplicativos vinculados a IO e não a aplicativos vinculados a CPU. O que você quer é uma combinação dos dois. Qualquer coisa ligada à CPU entra em um novo thread / processo. Qualquer coisa ligada a IO entra em um loop de eventos.
Raynos 25/10/11
1
+! Esse cara é definitivamente um troll.
Patrick Hughes
Depende do que você compara - se você ainda usa o Apache (por algum motivo) - então o Node é um presente dos deuses, mas se você o comparar ao Nginx - as melhorias são muito menos drásticas e o Node é ainda mais lento. (dez vezes mais lento, 2ms vs 20ms para gerar uma resposta, MAS em nossos testes, o Nginx estava dando 504 sob carga moderadamente pesada e o Node estava dando respostas normais).
C69
Agora você menciona isso pessoal, o troll é claramente um troll. @ c69 é uma boa informação, muito obrigado.
25411 Alex
O link "conversa direta sobre loops de eventos" não funciona mais.
Robert Harvey

Respostas:

20

Obviamente, qualquer trabalho vinculado à CPU utilizará a CPU. Isso bloqueará a CPU em qualquer idioma ou estrutura em que você a escrever.

O Node.js é ótimo para quando você tem um trabalho vinculado à E / S, não à CPU. Eu não faria trabalho pesado no Node, embora isso possa ser feito. O Node.js resolve problemas reais , não imaginários ou imaginários, como os servidores de números fibonacci . Não é "ar quente".

Josh K
fonte
Apenas verificando alguns pontos de referência e de fato parece maneira mais rápida de páginas que servem: zgadzaj.com/... .. Eu acho que isso é o que eu estava depois ...
Alex
3
@AlexW: Um bom argumento sobre esses benchmarks é que você está essencialmente veiculando conteúdo estático. Veja meus milhões de hits por dia . Girar o interpretador PHP para isso é desperdício. Veja algo como node-static para servir diretórios de arquivos.
Josh K
@ Alex, Apenas para lembrar que o zgadzaj.com/… usa o node.js 0.1.103, que é antigo agora !!
Samyak Bhuta
4

Embora o documento C10K esteja um pouco desatualizado em relação aos detalhes da implementação, a simultaneidade baseada em eventos (o modelo do reator) ainda é, de certa forma, superior ao agendamento preventivo. Por exemplo, um modelo de agendamento preventivo pode agendar encadeamentos enquanto estão bloqueados por IO. Isso permite que o nó (e outras ferramentas como Ruby's Event Machine e Twisted do Python) usem melhor os ciclos disponíveis, gastando mais tempo realizando um trabalho real e menos tempo bloqueando.

Rein Henrichs
fonte
-1

O multithreading ainda aumenta o desempenho. A explicação original é idiota, pois não considera a existência de múltiplos núcleos. No momento em que você tem mais de um núcleo, os threads não são mais threads. Eles são hyperthreads. Qualquer aplicativo intensivo de encadeamento se beneficiará mais do que um único aplicativo encadeado.

aanand_ub
fonte
2
Isso realmente não explica o fervor do Node.JS. O principal benefício do Node.JS é sua capacidade de manipular e despachar rapidamente várias solicitações de um único encadeamento, não manipular efetivamente cargas de trabalho em segundo plano pesadas, que sua resposta não aborda.
Robert Harvey
O principal benefício do node.js é ter um único idioma para front-end e back-end. Todas essas outras reivindicações são apenas cotão para torná-lo mais importante.
Whatsisname 26/05
2
A simultaneidade de thread único do @whatsisname é um benefício enorme, muito maior do que ter um único idioma na minha opinião.
pllee