ForgeTotal.js 5
ro

Total.js 5

Utilizați toate core-urile CPU cu modul de cluster

Total.js 5 · total5@0.0.19 clusterperformancedeployment Executată cu Total.js 5

Un proces Node.js folosește un singur nucleu al procesorului. Total.run({ cluster: N }) pornește un master care creează N procese worker, fiecare rulând întreaga ta aplicație, iar sistemul de operare distribuie între ele conexiunile primite ('auto' în loc de un număr lasă masterul să adauge fire pe măsură ce crește încărcarea). Rulează-l în modul release (release: true, pe care scriptul de pornire generat îl setează cu --release); watcherul din modul debug nu este făcut pentru un cluster. În scriptul de pornire este o singură opțiune:

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

Fiecare worker este un proces separat cu propria memorie, deci tot ce păstrezi într-o variabilă, în CACHE sau în MEMORIZE există o dată pe worker și nu se partajează: două cereri ale aceluiași utilizator pot ajunge la workeri diferiți. Păstrează starea comună într-o bază de date, într-un depozit de fișiere sau într-un serviciu de mesaje și ține sesiunile într-un depozit pe care îl pot citi toți workerii. Sarcinile programate precum CRON() rulează și ele în fiecare worker, așa că protejează-le dacă trebuie să ruleze o singură dată.

Verifică dacă toți workerii sunt porniți. După un deploy, cere de mai multe ori un URL ca /pid/ de mai jos și numără id-urile distincte: trebuie să fie tot atâtea câți workeri ai cerut.

Fiecare lucrător are propriul ID de proces. exemplul începe cu doi lucrători și include acest ID în răspuns.

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 });