© istockphoto.com/polygraphus
Mit PM2 Node.js-Applikationen in der Cloud im Griff behalten

Lebensversicherung


In diesem Artikel beschreiben wir eine mögliche Umsetzung von Monitoring und automatischen Neustarts von Node.js-Anwendungen in PaaS-Umgebungen. Die Einrichtung der Überwachung und Steuerung der Serverlaufzeitumgebung gestaltet sich in Cloud-Systemen schwieriger als auf Servern, die unter der vollen Kontrolle des Entwicklungsteams stehen – sie ist aber nicht unmöglich! Die hier vorgestellte Lösung mithilfe der PM2-Bibliothek ermöglicht einen transparenten und langfristig stabilen Betrieb einer JavaScript-Anwendung, ohne auf teurere IaaS-Anbieter ausweichen zu müssen.

Mit den ausgereiften Tools der Node.js-Umgebung ist es heutzutage möglich, in wenigen Wochen eine produktionsreife und ausreichend stabile Webpräsenz mit fortschrittlichen Funktionen zu erstellen. Die so erstellte Anwendung läuft unter Normalzuständen ohne Unterbrechung für Wochen in der Cloud, womit praktisch eine 99-prozentige Verfügbarkeit gegeben ist. Aber reicht uns eine 99-prozentige Verfügbarkeit ohne Rückversicherung?

Eine weitere Fragestellung lautet: Wie können wir sicherstellen, dass sich unsere Anwendung auch dann erholen kann, wenn abhängige Dienste (wie Datenbankserver) oder das Netzwerk zeitweise ausfallen? Manche IaaS-Anbieter, wie Amazon, versprechen eine 99,999-prozentige Hochverfügbarkeit ihrer Dienste, wonach sich im Falle dieses Anbieters unsere schriftlichen SLAs richten könnten. Kleinere Cloud-Nischenanbieter können mit diesem (schwer prüfbaren) Versprechen nicht mithalten und verlieren meist den Kampf der Nachkommastellen. Außerdem verfügt Amazon über ein sehr gut konfigurierbares und programmierbares Überwachungstool: CloudWatch [1], das sich positiv im Bereich des Monitoringtoolmarkts von den Wettbewerbern abhebt.

Allerdings ist der Betrieb einer kleinen Anwendung mit Datenbankunterstützung bei solchen globalen Anbietern oft nicht ganz billig: Mit mindestens (!) 500 Euro pro Monat muss man auch bei Sparangeboten rechnen (siehe Rechenbeispiele auf der Calculator-Webseite von Amazon [2]). Der Vorteil von kleineren PaaS-Anbietern (Platform as a Service) wie Heroku, Modulus oder OpenShift ist der Preis und die bereits aufgesetzte Laufzeitumgebung; in unserem Fall die vorinstallierte Node. js. Da wir kostenbewusst sind, nutzen wir PaaS für die Veröffentlichung unserer Node.js-Anwendung. Trotzdem möchten wir nicht auf Hochverfügbarkeit verzichten. Gibt es dafür eine Lösung?

PM2, lokal

Die Laufzeitumgebung von Node.js ist absichtlich schlank gehalten worden, ganz im Sinne der UNIX-Philosophie „Do One Thing and Do It Well“ [3]. Für unsere Fragestellung heißt das, dass unsere Umgebung out of the box keine Tools oder Bibliotheken für Hochverfügbarkeit anbietet, aber in der Open-Source-Gemeinde wahrscheinlich ein Erweiterungsmodul dafür existiert. Eine kurze Recherche führt zu der populärsten Lösung zur Node. js-Prozessüberwachung: PM2, eine Bibliothek, die als zuverlässiger und oft eingesetzter Produktionsprozessmanager beschrieben wird [4]. Namhafte Firmen, unter anderem PayPal, Microsoft und IBM, nutzen das Tool.

Die Installation und der Start des Prozessmanagers bei eingerichtetem Node.js sind einfach; mit nur zwei Zeilen haben wir das Tool auf unserem Entwicklungsrechner zum Laufen gebracht:

$ npm install pm2 –g $ pm2 start server.js

Aber es wartet eine Überraschung auf uns: Zwar zeigt die Kommandozeile eine Erfolgsmeldung an, und es werden auch mehrere neue Fenster geöffnet, dennoch bleibt unsere Webanwendung unerreichbar. Was läuft hier nicht erwartungsgemäß?

Die Erklärung offenbart sich nach Versuchen unter verschiedenen Betriebssystemen: PM2 unterstützt in der aktuellen Version nur UNIX-artige Systeme (hier zeigt sich einer der Nachteile der UNIX-Wurzel des Node. js-Ökosystems), nicht aber die von uns verwendete Windows-Laufzeitumgebung. Unter einem aktuellen Ubuntu-System läuft die PM2-Bibliothek sehr zuverlässig. Bereits die oberen zwei Kommandos sorgen dafür, dass Node.js und unsere Webanwendung g...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang