2013-11-25 15 views
6

Ho letto oltre lo this article piuttosto a fondo e ho trascorso alcune ore a ricercare l'argomento del clustering (processi di forking) in Node.js.Cluster Node.js - Cosa determina il bilanciamento del carico?

Quello che non riesco a capire dall'articolo, è ciò che determina quale processo di lavoro ottiene la richiesta X, se tutti stanno ascoltando sulla stessa porta?

C'è un modo per il processo principale di canalizzare le richieste, o è solo casuale?

risposta

3

C'è una buona spiegazione here. Per farla breve, ci sono 2 comportamenti diversi a seconda della versione del tuo nodo:

nodo 0.8-0.10 (e 0.12+ su Windows): ogni processo è in ascolto sulla porta. Il sistema operativo decide quale risvegliarsi quando arriva una nuova connessione. In alcune applicazioni in alcuni sistemi operativi questo non funziona molto bene e lascia alcuni processi con una forte maggioranza delle connessioni; nella maggior parte funziona bene.

nodo 0.12+ (eccetto su Windows): il processo master è in ascolto sulla porta. Quando entrano, li consegna ai lavoratori in modo da avere un round robin.

In entrambi i casi, l'applicazione deve considerarla casuale (sebbene probabilmente si possano ipotizzare delle ragionevoli caratteristiche di bilanciamento del carico). Tuttavia, se per qualche motivo bisogno di un controllo più fine, una frase in tale articolo (da notare che è stato scritto da un collaboratore nucleo node.js, quindi c'è qualche autorità qui):

Girando l'algoritmo di selezione in qualcosa che è configurabile o collegabile dallo sviluppatore è un cambiamento che è in esame.

dice che si potrebbe ottenere ciò che stai cercando. Sembra che ci sia an issue on Github relativo a questa opzione.

+3

Non so 0.12 ma penso che sia RR in 0.11.2. Ecco il [commit] rilevante (https://github.com/joyent/node/commit/e72cd41) – user568109

+0

@ user568109 Interessante. Sembra "nuovo in v0.12", l'articolo significa che è la prima versione principale in cui è inclusa, che include solo i numeri pari? Aggiornato a qualcosa di più vicino alla lingua dell'articolo (facendo riferimento solo alle versioni principali 0.8, 0.10 e 0.12). –

Problemi correlati