@yociyavi

Почему сluster не уменьшает время загрузки?

Решил проверить работу cluster. Написал цикл который отрабатывает 9-10 секунд. И запустил 4 вкладки примерно одновременно.
Итого имеем:
1) 10,05 сек
2) 19,99 сек
3) 31,38 сек
4) 41,93 сек

Т.е. кластер будто не работает.
Хотя процессы есть:
3c80ad4d39a8478d9f9a5f827c82c5bf.png

Вот код сервера:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
} else {
    http.createServer((req, res) => {
        for (var i = 0; i < 5000000000; ++i) {
        }
        res.writeHead(200);
        res.end('hello world\n');
    }).listen(3000);
}
  • Вопрос задан
  • 309 просмотров
Решения вопроса 2
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Кластер и не должен уменьшать время загрузки. Его задача - поднять общую производительность rps (request per second). Как он работает, соединение устанавливается с мастером и потом сокет передается через IPC в воркер для обработки. Если каждое соединение делает нечто более трудоемкое, чем отдача строки, то это позволит утилизировать под задачу доп. ядра, но для Вашего случая, накладные расходы на IPC компенсируют распараллеливание обработки. Кроме того, IPC сам по себе не быстрый, и cluster - это кусок говнокода, из встроенных библиотек ноды хуже написана только http. Я убрал cluster из своих проектов и готовлюсь убрать http.
Ответ написан
Комментировать
Lynn
@Lynn
nginx, js, css
Не нужно такие вещи проверять браузером. Он, во-первых, кеширует (и, например если у вас 10 запросов к одному адресу, то первый уйдёт, а остальные будут ждать, вдруг первый отдаст заголовок разрешающий брать данные из кеша и не нужно будет делать ещё 9 запросов), во-вторых, держит сетевое соединение и поэтому следующие запросы (с большой вероятностью) попадут в тот же воркер.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Проверьте cluster.schedulingPolicy - ожидаемое вами поведение это round-robin
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы