Я пытаюсь определить, является ли это честным эталоном. Цель состоит в том, чтобы увидеть, сколько одновременных соединений с полезными нагрузками различного размера может обрабатывать Node.JS. Код ниже.Простой Node.JS Benchmark
var express = require('express');
var Sequelize = require('sequelize');
var fs = require('fs');
var app = express();
var data;
var filename = process.argv[2] || './start.json';
console.log("Using: " + filename);
data = fs.readFileSync(filename);
var blockSize = 250000;
app.get('/start', function (req, res) {
// Break up data in blocks. Works to super high concurrents.
// for(var i = 0; i < data.length; i+=blockSize)
// res.write(data.slice(i, i+blockSize));
// Can only handle about 600 concurrent requests if datasize > 500KB
res.send(data);
});
app.listen(3000, function() {
console.log('Listing on 3000.');
});
Как указано в комментариях, если размер полезной нагрузки больше, чем около 500 КБ и там есть 500 будет конкуренты сделать получить «сброс соединения по равному» на клиенте нагрузочного тестирования. Если вы перерезаете данные и напишите их в кусках, он сможет выжить до гораздо более высоких контуров до того, как это начнется. Как исходный узел, так и экспресс демонстрируют такое поведение.
Проблема большая часть данных находится в ОЗУ. Таким образом, для больших полезных нагрузок это сводится к тому, сколько времени потребуется для memcpy(). Это именно те виды рабочей нагрузки, с которыми узел плохо справляется. Узел оптимизирован для ввода-вывода, а не для обработки ОЗУ. Вы получите гораздо лучший параллелизм, открывающий файл как поток чтения и передающий его клиенту. Это приведет к смещению почти всей нагрузки на ОС вместо узла, а если вы находитесь в Linux или Solaris, вы получите огромный импульс от драйверов оптимизированной файловой системы. – slebetman
С другой стороны, для небольших полезных нагрузок вы часто получаете лучшую производительность, сохраняя данные в ОЗУ. Так что это действительно так. – slebetman
Процессор привязывается к 100%, когда размер данных больше, что для узла явно плохо. –