2013-06-05 14 views
21

node.js scalabile, cosa si intende per quello? Quale parte di un server node.js è scalabile. Ho letto che si tratta di una tecnologia a thread singolo che non è adatta per le applicazioni che necessitano di molte risorse della CPU. Questi fatti non si adattano alla scalabilità, quindi cosa si intende per questo?Perché Node.js è scalabile?

+0

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

+0

@Jason Non sto cercando risposte di codifica tecnica – vuvu

+1

In questo post viene evidenziata la scalabilità, incluso il bilanciamento del carico e le redis. –

risposta

15

Il javascript su cui viene eseguito il nodo è a thread singolo, ma molte delle cose che chiamate nel nodo - come rete o file io - vengono eseguite in thread in background. Vedi questo post per una panoramica di base: Node is not single threaded

Se avete bisogno i dettagli grintosi, si dovrebbe guardare in libuv, che è il pezzo 'magia' convertire le discussioni in caso loop: http://nikhilm.github.io/uvbook/basics.html#event-loops

Inoltre, se avete bisogno di per fare qualcosa a livello di CPU nel nodo stesso, puoi facilmente inviarlo a un processo figlio - vedi http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options per dettagli

+0

Sono operazioni come la lettura dal database o l'aggiornamento, il blocco o il non blocco? Questo è w.r.t per RDBMS. Suggerite Nodo per tali app? – LearningToCode

2

è scalabile a causa del bilanciamento del carico. Essenzialmente è possibile avere più processi per il nodo da elaborare e può gestirlo senza oneri significativi. Questo lo rende scalabile.

+6

Come viene realizzato il bilanciamento del carico? – vuvu

3

Non è più "di per sé" scalabile. È più che tutto ciò che fai è (I/O) scalabile senza dover fare nulla di speciale.

I/O è più sicuro e più semplice da eseguire in parallelo, poiché tende a non condividere dati tra i thread di esecuzione. Node.js ti permette di farlo usando la programmazione di eventi che è semplice, elegante e facile da usare. È un paradigma di programmazione vecchio e provato, utilizzato per anni dalle GUI e da altre applicazioni grafiche intensive come i giochi, ad esempio.

In effetti è meno scalabile rispetto a linguaggi completi come C++, c, java, ecc. Che possono essere scalati molto meglio utilizzando il multithreading completo. Ciò consente di scalare anche la CPU, ma apre anche una lattina di worm. Per condividere la CPU, devi condividere i dati, e questa è un'altra storia (semafori, serrature, ecc ...)

Puoi fare lo stesso di node.js con una qualsiasi delle lingue sopra, ma non fa parte del linguaggio stesso, quindi devi eseguire il rollover o utilizzare le librerie che lo forniscono. Detto questo, non è così difficile, ma sicuramente più difficile di in node.js.

La maggior parte dei servizi Web, sono legati all'IO, quindi Node.js si adatta bene ed è OK per la maggior parte dei casi. Ma una volta che si inizia a utilizzare il lavoro intensivo della CPU, gli eventi non sono assistiti e tutti si fermano. In tal caso, utilizzare meglio un'altra lingua. Non c'è davvero una buona soluzione in Node per questo. È possibile generare più processi, ma non sarà possibile condividere i dati tra di essi. Senza la condivisione dei dati, non c'è modo di scalare la CPU in modo efficiente, quindi meglio non provarci.

Utilizzare Node.js per IO e un linguaggio più adatto con multithreading appropriato per il lavoro intensivo della CPU.

0

Tutte le API del nodo sono scritte in modo tale da supportare i callback.

Ad esempio, una funzione per leggere un file può iniziare a leggere il file e restituire il controllo all'ambiente di esecuzione immidamente in modo da poter eseguire l'istruzione successiva. Una volta che l'I/O del file è completo, chiamerà la funzione di callback mentre passa la funzione di callback, il contenuto del file come parametro. Quindi non c'è alcun blocco o attendere I/O di file. Ciò rende Node.js estremamente scalabile, in quanto può elaborare un numero elevato di richieste senza attendere che alcuna funzione restituisca un risultato. - Punto dell'esercitazione.

Problemi correlati