Подтвердить что ты не робот

Node.js дочерние процессы на Heroku с одним Dyno

Простите мое невежество, я в настоящее время изучаю, как использовать Node, исходя из фона PHP, где у меня действительно не было взаимодействия с Apache или сервером. Я использую Heroku для размещения моих проектов Node, которые выталкиваются прямо из среды Cloud9.

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

Я знаю, что Node представляет собой однопоточную систему, которая обрабатывает запросы один за другим, позволяя вам создавать дочерние процессы для чего-то, что может занять некоторое время (например, запросы к базе данных, файлы обработки и т.д.).

Итак, что происходит в Heroku, если я создаю дочерний процесс с помощью одного dyno? Разве это не нуждается в другом динамоме? Конечно, если Node работает с одним процессом, и у меня есть только один процесс, доступный в моем одном динамо, любые дополнительные процессы тоже будут обрабатываться этим?

Или у меня все это неправильно?

4b9b3361

Ответ 1

Ваше понимание exec грубо верно, я беспокоюсь, что вы используете его, когда вам не нужно это делать... В вашем вопросе вы указываете только типы I/O-типов, которые node обрабатывает очень эффективно внутри него однопоточная модель событий. Несмотря на однопоточность, модель событий позволяет запускать код без блокировки основного цикла событий (если только вы не выполняете интенсивные операции с интенсивным процессором..., из которых запросы базы данных и обработка файлов не включены). Говоря, вы должны не нужно запускать дополнительный диктофон, чтобы делать то, что вы хотите.

Подумайте о динамике как о процессоре с одним процессором. Независимо от того, что вы можете сделать на машине с одним процессором, которую вы можете делать на вашем динамо, без каких-либо дополнительных сборов или созданных динамиков. Хотя, dyno имеет значительно меньше памяти, чем один процессор с одним ядерным процессором. Таким образом, для любых подпроцессов, которые вы хотите создать, не требуется другой динамометр для запуска. Каждому мастер-процессу, который вы хотите запустить, понадобится его собственный dyno.

var http = require('http');

http.createServer(function (req, res) {

    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('An amount of data that will take 1 second to send');//This will not block the event loop
}).listen(1337, '127.0.0.1');

var http = require('http');
http.createServer(function (req, res) {

    while(true) {
         break after 1 second; //this will block the event loop for 1 second
    }

    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, '127.0.0.1');

Рассмотрим два сервера в приведенном выше коде. Оба сервера выполняют примерно одну секунду работы. Первый пример может обслуживать тысячи запросов в секунду, второй пример - только 1. Отправка данных, запросов к базе данных, запросов на сервер, файла ввода-вывода и т.д.... все будут вести себя как первый пример... очень мало всего в node ведут себя как второй пример. Если у вас есть что-то, что соответствует второму примеру, вам, вероятно, лучше выбрать другой язык, чем пытаться заставить node работать в прецеденте, для которого он очень плохо разработан.