Verwenden Sie alle CPU-Kore mit dem Clustermodus
Ein Node.js-Prozess nutzt einen CPU-Kern. Total.run({ cluster: N }) startet einen Master, der N Worker-Prozesse abzweigt, die jeweils deine ganze Anwendung ausführen, und das Betriebssystem verteilt die eingehenden Verbindungen auf sie ('auto' statt einer Zahl lässt den Master bei steigender Last Threads hinzufügen). Führe ihn im Release-Modus aus (release: true, was das generierte Startskript mit --release setzt); der Debug-Watcher ist nicht für einen Cluster gedacht. Im Startskript ist es eine einzige Option:
Total.run({ cluster: 4, release: true }); // or cluster: 'auto'Jeder Worker ist ein eigener Prozess mit eigenem Speicher. Alles, was du in einer Variablen, in CACHE oder in MEMORIZE hältst, existiert also einmal pro Worker und wird nicht geteilt: Zwei Anfragen desselben Benutzers können bei verschiedenen Workern landen. Halte gemeinsamen Zustand in einer Datenbank, einem Dateispeicher oder einem Nachrichtendienst und speichere Sessions in einem Speicher, den alle Worker lesen können. Geplante Aufgaben wie CRON() laufen ebenfalls in jedem Worker, sichere sie also ab, wenn sie nur einmal laufen sollen.
Prüfen Sie, ob alle Worker laufen. Rufen Sie nach einem Deployment mehrmals eine URL wie /pid/ unten ab und zählen Sie die verschiedenen IDs: Es sollten so viele sein, wie Sie Worker angefordert haben.
Jeder Arbeiter hat sein eigenes Prozess-ID. Das Beispiel beginnt mit zwei Arbeitern und enthält diesen ID in der Antwort.
exports.install = function() {
ROUTE('GET /pid/', pid);
ROUTE('GET /dir/', dir);
};
function pid($) {
$.json({ pid: process.pid });
}
function dir($) {
$.json({ dir: PATH.root() });
}require('total5');
Total.run({ cluster: 2, port: 8766, release: true });