ForgeTotal.js 5
bg

Total.js 5

Използвайте всички ЦПУ корени в режим на кластер

Total.js 5 · total5@0.0.19 clusterperformancedeployment Изпълнено с Total.js 5

Един процес на Node.js използва едно ядро на процесора. Total.run({ cluster: N }) стартира master, който създава N процеса worker, всеки от които изпълнява цялото ви приложение, а операционната система разпределя входящите връзки между тях ('auto' вместо число оставя master да добавя нишки, когато натоварването расте). Изпълнявайте го в режим release (release: true, който генерираният стартов скрипт задава с --release); watcher-ът на режим debug не е предназначен за cluster. В стартовия скрипт това е една опция:

Total.run({ cluster: 4, release: true }); // or cluster: 'auto'

Всеки worker е отделен процес със собствена памет, така че всичко, което държите в променлива, в CACHE или в MEMORIZE, съществува веднъж за всеки worker и не се споделя: две заявки на един и същ потребител може да попаднат при различни workers. Държете споделеното състояние в база данни, във файлово хранилище или в служба за съобщения, а сесиите в хранилище, което всички workers могат да четат. Планираните задачи като CRON() също се изпълняват във всеки worker, затова ги защитете, ако трябва да се изпълнят само веднъж.

Проверете дали всички работници работят. След внедряване поискайте няколко пъти адрес като /pid/ по-долу и пребройте различните идентификатори: трябва да са толкова, колкото работници сте поискали.

Всеки работник има свой собствен процес ID. Примерът започва двама работници и включва този ID в отговора.

controllers/pid.js
exports.install = function() {
	ROUTE('GET /pid/', pid);
	ROUTE('GET /dir/', dir);
};

function pid($) {
	$.json({ pid: process.pid });
}

function dir($) {
	$.json({ dir: PATH.root() });
}
cluster.js
require('total5');
Total.run({ cluster: 2, port: 8766, release: true });