Кластер узлов не отправляет задачу другому доступному работнику

Это мой первый вопрос о переполнении стека, поэтому, пожалуйста, извините меня за любую ошибку или недостаточную информацию в этом вопросе.

Итак, я пытаюсь использовать кластерный модуль nodeJS для своего сервера, и я запускаю nodeJS через свой компьютер с Windows. Я знаю, что у nodeJS нет политики планирования для кластерного модуля в Windows, поэтому я явно установил scheduling_policy на rr, как указано в документах nodeJS. Но проблема в том, что я пытаюсь занять одного рабочего, помещая его в бесконечный цикл; сервер не отправляет запрос другому работнику, доступному и свободному, когда мы пытались запросить у сервера ресурс '/'.

Please help me why it is not dispatching the request to other workers.

var cluster=require('cluster');
if(cluster.isMaster){
	var cores=require('os').cpus().length;
	console.log("Master Cluster setting up :-"+cores+" workers");
	for(var i=0;i<cores;i++)
		cluster.fork();
	cluster.on('online',(worker)=>{
		console.log("Worker with Process ID :- "+worker.process.pid+" online");
	});
	cluster.on('exit',(worker)=>{
		console.log("worker "+worker.process.pid+" died...So setting up a new worker");
		cluster.fork();
	});
}
else{
	var app=require('express')();
	app.get('/',(req,res)=>{
		console.log("Process with pid "+process.pid+" is handling this request");
		while(true);
		res.write("Yes!");
		res.end();
		//while(true);
	})
	app.listen('3000');
}


person Tarun Garg    schedule 23.02.2016    source источник
comment
Я попробовал этот код на своем локальном компьютере и отправил 1000 одновременных пользователей на 1 минуту. Я вижу, что два процесса обслуживают ответ   -  person Nalla Srinivas    schedule 23.02.2016


Ответы (1)


Код выше, который вы написали, работает хорошо. Но вам нужно отправлять одновременные запросы на ваш сервер узла вместо отправки запроса в цикле, тогда вы увидите мощность модуля кластера узлов.

В модуле кластера узлов есть два подхода к распределению входящих подключений.

Первый (и используемый по умолчанию на всех платформах, кроме Windows) - это циклический подход.

Второй подход заключается в том, что главный процесс создает прослушивающий сокет и отправляет его заинтересованным исполнителям. Затем рабочие принимают входящие соединения напрямую.

Вы можете использовать http://blog.remarkablelabs.com/2012/11/benchmarking-and-load-testing-with-siege для отправки параллельного запроса. Теперь вы увидите, как переключиться на свой процесс.

person Nalla Srinivas    schedule 23.02.2016