Ich bin ein Anfänger in nodejs. Ich versuche, nodejs in der Produktion zu verwenden. Ich wollte den Failover von Nodejs erreichen. Wenn ein Node-Server ausfällt, sollte der Chat bei der Ausführung der Chat-App nicht abgebrochen werden und sollte automatisch mit einem anderen Nodeserver verbunden werden. Die gleiche Socket-ID sollte für das weitere Chatten verwendet werden, damit die Chat-Nachricht nicht gelöscht wird. Kann das erreicht werden? Irgendwelche Proben.
Ich sollte nicht Ngnix / HAProxy verwenden. Lassen Sie mich auch wissen, wie die Knotenserver sein sollten: Entweder Active-Active oder Active-Passive
PM2 ist bevorzugt der Prozessmanager, insbesondere die Funktionen Auto-Failover, Auto-Scaling und Auto-Neustart .
Die Einführung ist wie folgt,
PM2 ist ein Produktionsprozessmanager für Node.js-Anwendungen mit ein eingebauter Load Balancer. Es ermöglicht Ihnen, Anwendungen am Leben zu erhalten für immer, um sie ohne Ausfallzeit neu zu laden und zu erleichtern Systemadministrationsaufgaben.
Das Starten einer Anwendung im Produktionsmodus ist so einfach wie:
%Vor%PM2 wird ständig von mehr als 700 Tests angegriffen.
Offizielle Website: Ссылка
Funktioniert unter Linux (stabil) & amp; MacOSx (stabil) & amp; Windows (beta).
Es gibt mehrere Probleme, die du sofort lösen musst:
Daemonisierung - Halten Sie Ihre App aufrecht : Wie bereits erwähnt, können Skripte wie forever
verwendet werden, um Ihre nodeJS-Anwendung zu überwachen, um sie bei einem Fehler neu zu starten. Dies ist gut für den Start der Anwendung im schlimmsten Fall Fehler.
In ähnlicher Weise kann recluster verwendet werden, um Ihre Anwendung zu verzweigen und sie fehlerhafter zu machen, indem Sie einen Supervisor-Prozess und Subprozesse erstellen .
Nicht abgefangene Ausnahmen : Eine bekannte Hürde in nodejs besteht darin, dass asynchrone Fehler nicht mit einem try / catch-Block abgefangen werden können. Als Konsequenz können Ausnahmen platzen und Ihre gesamte Anwendung zum Absturz bringen.
Anstatt dies zuzulassen, sollten Sie Domains verwenden, um eine logische Gruppierung von Aktivitäten zu erstellen, auf die sich die Änderungen auswirken die Ausnahme und behandeln Sie es als angemessen. Wenn Sie einen Webserver mit Status ausführen, sollte wahrscheinlich eine nicht behandelte Ausnahme abgefangen und der Rest der Verbindungen ordnungsgemäß beendet werden, bevor die Anwendung beendet wird.
(Wenn Sie eine statusfreie Anwendung ausführen, kann es möglich sein, die Ausnahme einfach zu ignorieren und zu versuchen, weiterzumachen; dies ist jedoch nicht unbedingt ratsam. Verwenden Sie sie vorsichtig).
Sicherheit : Das ist ein großes Thema. Sie müssen mindestens sicherstellen:
Nebenbei bemerkt, Sie verwenden Apache vor NodeJS, dies ist nicht unbedingt so, da Apache wahrscheinlich unter Last mit seinem Threading-Modell mehr als nodeJS mit seinem Event-Loop-Modell kämpfen wird.
unter der Annahme, dass Sie eine Datenbank für die Authentifizierung von Clients verwenden, gibt es nicht viel zu tun, ich meine, ein Skript zur Verwaltung des Zustands des Server-Skripts, wie forever
,
Es würde versuchen, das Skript zu starten, wenn es fehlschlägt, mehr als das sollten Sie das Server-Skript entwerfen, um jeden bekannten und möglichen unbekannten Fehler, jedes an ihn gesendete Signal usw. zu behandeln.
Ein kleines Beispiel wäre mit Streams.
%Vor%- Ich hoffe, ich habe irgendwie geholfen.
Für einen einfachen Ansatz sollten Sie einen Reconnect-Mechanismus auf Ihrer Clientseite erstellen und eine Prozessverwaltung als forever
oder PM2
verwenden, um Ihre Node.js-Prozesse zu verwalten. Ich habe zu viele Möglichkeiten versucht, aber immer noch nicht das Socket-Problem zu überwinden, es wird immer getötet, wenn der Prozess aufhört.
Sie könnten versuchen, Pm2 start app.js -I 0
zu verwenden. Dadurch würde Ihre Anwendung im Clustermodus ausgeführt und viele untergeordnete Prozesse für denselben Thread erstellt. Sie können Sockelinformationen zwischen verschiedenen Prozessen austauschen.