ForgeTotal.js 5
nl

Total.js 5

Gebruik alle CPU-cores met de clustermodus

Total.js 5 · total5@0.0.19 clusterperformancedeployment Uitgevoerd met Total.js 5

Een Node.js-proces gebruikt één CPU-kern. Total.run({ cluster: N }) start een master die N workerprocessen afsplitst, elk met je hele applicatie, en het besturingssysteem verdeelt de binnenkomende verbindingen over hen ('auto' in plaats van een getal laat de master threads toevoegen naarmate de belasting stijgt). Draai het in releasemodus (release: true, wat het gegenereerde startscript met --release instelt); de debug-watcher is niet bedoeld voor een cluster. In het startscript is het één optie:

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

Elke worker is een apart proces met eigen geheugen, dus alles wat je in een variabele, in CACHE of in MEMORIZE bewaart, bestaat één keer per worker en wordt niet gedeeld: twee verzoeken van dezelfde gebruiker kunnen bij verschillende workers uitkomen. Bewaar gedeelde status in een database, een bestandsopslag of een berichtendienst en houd sessies in een opslag die alle workers kunnen lezen. Geplande taken zoals CRON() draaien ook in elke worker, dus beveilig ze als ze maar één keer mogen draaien.

Controleer of alle workers draaien. Vraag na een deploy meerdere keren een URL zoals /pid/ hieronder op en tel de verschillende id’s: het moeten er evenveel zijn als de workers die je vroeg.

Elk werknemer heeft zijn eigen proces-ID. Het voorbeeld begint met twee werknemers en omvat dat ID in de reactie.

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