ForgeTotal.js 5
fr

Total.js 5

Utilisez tous les cœurs CPU avec le mode cluster

Total.js 5 · total5@0.0.19 clusterperformancedeployment Exécutée avec Total.js 5

Un processus Node.js n'utilise qu'un seul cœur. Total.run({ cluster: N }) démarre un master qui lance N processus worker, chacun exécutant toute votre application, et le système d'exploitation répartit les connexions entrantes entre eux ('auto' à la place d'un nombre laisse le master ajouter des threads quand la charge augmente). Exécutez-le en mode release (release: true, que le script de démarrage généré active avec --release) ; le watcher du mode debug n'est pas prévu pour un cluster. Dans le script de démarrage, c'est une seule option :

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

Chaque worker est un processus distinct avec sa propre mémoire : tout ce que vous conservez dans une variable, dans CACHE ou dans MEMORIZE existe une fois par worker et n'est pas partagé. Deux requêtes d'un même utilisateur peuvent donc tomber sur des workers différents. Conservez l'état partagé dans une base de données, un stockage de fichiers ou un service de messages, et gardez les sessions dans un stockage que tous les workers peuvent lire. Les tâches planifiées comme CRON() s'exécutent aussi dans chaque worker ; protégez-les si elles ne doivent s'exécuter qu'une fois.

Vérifiez que tous les workers sont démarrés. Après un déploiement, demandez plusieurs fois une URL comme /pid/ ci-dessous et comptez les ids distincts : il doit y en avoir autant que de workers demandés.

Chaque travailleur a son propre ID de processus.L'exemple commence par deux travailleurs et comprend ce ID dans la réponse.

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