Websites
Skalierung und automatische Skalierung einer Node.js-App
Auto-scaling grows and shrinks the number of instances running your Node.js app as CPU load changes, so busy periods get more capacity and quiet periods cost less. This guide covers the KPanel tab…
Skalierung und Auto-Skalierung einer Node.js-App
Auto-Skalierung erhöht und reduziert die Anzahl der Instanzen, auf denen Ihre Node.js-App läuft, wenn sich die CPU-Last ändert. So erhalten ausgelastete Phasen mehr Kapazität und ruhigere Phasen kosten weniger. Diese Anleitung behandelt den KPanel-Tab, alle Einstellungen, was berechnet wird und wie Sie eine App sicher skalierbar machen.
Wo Skalierung in KPanel zu finden ist
- Melden Sie sich bei KPanel an.
- Klicken Sie in der linken Seitenleiste auf Websites und dann auf die Website.
- Öffnen Sie im Tab-Streifen der Website Advanced und dann Scaling.
Die direkte Adresse ist /websites/<site-id>/autoscale. Die ältere /websites/<site-id>/scaling-Adresse funktioniert noch immer und leitet Sie an denselben Ort weiter.

Der Tab erscheint nur auf Node.js-Websites. Er ist nicht im Menü für eine WordPress-, WooCommerce-, statische, PHP-, Python- oder Ruby-Website vorhanden, da der Mechanismus einen Node.js-Prozess-Cluster skaliert.
Ein Tab, eine Konfiguration
KPanel hatte früher hier zwei Tabs: Scaling und Autoscale über einem Satz von Einstellungen. Es waren zwei Ansichten derselben Konfiguration, was nur eine Möglichkeit war, sich zu verlaufen. Deshalb gibt es jetzt einen einzelnen Scaling-Tab: Live-Status, Einstellungen, aktuelle Skalierungsereignisse und das Nutzungs- und Kostenpanel für die aktuelle Abrechnungsperiode, alles an einem Ort.
So funktioniert es
Ihre App läuft als Prozess-Cluster. Auto-Skalierung überwacht die durchschnittliche CPU über alle laufenden Instanzen und fügt Instanzen hinzu oder entfernt sie anhand der eingestellten Schwellwerte.
Cluster-Modus ist erforderlich. Wenn Ihre App nicht bereits im Cluster-Modus läuft, wird sie durch die Aktivierung der Auto-Skalierung automatisch umgestellt, was einen kurzen Neustart verursacht. Die Seite teilt Ihnen mit, wenn dies passiert.
Live-Status lesen
Die Status-Karte zeigt drei Dinge:
- Instances: wie viele gerade laufen.
- Avg CPU: die durchschnittliche CPU über diese Instanzen.
- Cluster: ob die App im Cluster-Modus läuft. Falls nein, wird sie durch die Aktivierung der Auto-Skalierung umgestellt.
Wenn die App überhaupt nicht läuft, zeigt die Karte das an, statt Nullen anzuzeigen.
Der Tab zeigt auch Last scale, die Zeit des letzten Skalierungsereignisses, oder never.
Die Einstellungen
| Einstellung | Bereich | Funktion |
|---|---|---|
| Min instances | 1 bis 16 | Die Untergrenze. Skaliert nie darunter |
| Max instances | 1 bis 16 | Die Obergrenze. Skaliert nie darüber |
| Scale up at CPU % | 5 bis 99 | CPU über diesem Wert fügt eine Instanz hinzu |
| Scale down at CPU % | 1 bis 95 | CPU unter diesem Wert entfernt eine Instanz |
| Cooldown (sec) | 30 bis 3600 | Minimale Wartezeit zwischen Skalierungsmaßnahmen |
Der Hauptschalter ist die Umschaltfläche in der Kopfzeile der Einstellungskarte. Wenn Auto-Skalierung ausgeschaltet ist, sind die Einstellungen abgeblendet und Ihre App bleibt bei ihrer aktuellen Instanzanzahl.
Sinnvolle Startwerte:
- Min instances 1 oder 2. Zwei, wenn Sie nicht tolerieren können, dass der Neustart einer einzelnen Instanz die App offline nimmt.
- Max instances auf das, was Sie auf dem Höchststand ausgeben möchten, nicht auf das Maximum.
- Scale up um etwa 70 Prozent. Hoch genug, dass Sie nicht für Puffer zahlen, den Sie nie nutzen, niedrig genug, dass Zeit zum Hinzufügen von Kapazität bleibt, bevor Anfragen in die Warteschlange geraten.
- Scale down um etwa 30 Prozent. Halten Sie einen breiten Abstand zwischen den beiden Schwellwerten.
- Cooldown von einigen Minuten. Dies ist die am meisten unterschätzte Einstellung.
Das Setzen der beiden CPU-Schwellwerte nah beieinander verursacht Flapping: Der Cluster skaliert hoch, fällt sofort unter den Scale-down-Schwellwert, weil die Last jetzt breiter verteilt ist, skaliert herunter, spitzt sich wieder zu und wiederholt sich. Halten Sie einen breiten Abstand und verwenden Sie einen großzügigen Cooldown. Flapping kostet Geld und destabilisiert die App.
Skalierungsereignisse
Der Tab listet aktuelle Skalierungsereignisse auf, neueste zuerst. Jedes zeigt die Richtung, die Instanzanzahl vorher und nachher, die CPU-Messung, die es ausgelöst hat, und die Zeit.
Dies ist das Ereignisprotokoll, das man lesen sollte, wenn die App sich fehlerhaft verhalten hat. Eine Reihe von Auf- und Ab-Ereignissen in einigen Minuten bedeutet, dass Ihre Schwellwerte zu nah beieinander liegen oder Ihr Cooldown zu kurz ist. Eine einzelne Skalierung nach oben, die nie wieder nach unten kam, bedeutet, dass die Last hoch blieb. Das ist eine Kapazitätsfrage, keine Konfigurationsfrage. Überhaupt keine Ereignisse, wenn Sie welche erwartet hätten, bedeutet entweder, dass die CPU nie einen Schwellwert überschritten hat, oder Auto-Skalierung ist ausgeschaltet.
Was Auto-Skalierung kostet
Instanzen über die Basiszuteilung Ihres Plans werden pro Sekunde abgerechnet. Der Tab zeigt für die aktuelle Periode:
- Instance-time used: in Stunden und Minuten, mit den rohen Instanz-Sekunden darunter.
- Spent so far: in dieser Periode ausgegeben.
- Projected month-end: extrapoliert aus der bisherigen Nutzung.
- Tracking: wie viele Nutzungsfenster von den insgesamt erfassten abgerechnet wurden.
- Period progress: verstrichene Tage von den Tagen im Monat.
Der Tarif pro Sekunde wird oben in demselben Panel angezeigt, sodass die Zahl, nach der Ihnen abgerechnet wird, immer neben der Nutzung sichtbar ist, auf die sie sich bezieht.
Die Projektion ist die zu beobachtende Zahl. Sie extrapoliert aus dem, was Sie bisher genutzt haben. Eine ungewöhnlich ausgelastete Woche früh im Monat wird sie überschätzen. Überprüfen Sie sie nach ein paar Tagen und dann Mitte des Monats, bevor Sie Schlüsse ziehen. Wenn sie höher ist als gewünscht, senken Sie die maximale Instanzanzahl statt den Scale-up-Schwellwert zu erhöhen: Die Obergrenze ist eine harte Grenze, ein Schwellwert nur ein Hinweis.
Das Herunterskalieren auf das Minimum stoppt die Abrechnung. Wenn Sie Auto-Skalierung ganz ausschalten, bleibt die App bei ihrer aktuellen Instanzanzahl, also senken Sie sie zuerst auf das Minimum, falls Kosten der Grund sind, warum Sie sie ausschalten.
Eine App sicher skalierbar machen
Die Seite enthält eine Warnung, und das ist das Wichtigste darauf: Ihre Node.js-App muss cluster-sicher sein, um sauber über Instanzen hinweg zu skalieren.
Das bedeutet in der Praxis:
Kein In-Memory-Sitzungsstatus. Wenn die Sitzung eines angemeldeten Benutzers im Speicher einer Instanz lebt, wird er abgemeldet, sobald eine Anfrage auf einer anderen Instanz landet. Verschieben Sie Sitzungen in einen gemeinsamen Speicher.
Kein In-Memory-Cache, auf den Sie sich für Korrektheit verlassen. Jede Instanz hat ihren eigenen. Ein Cache, der konsistent sein muss, muss gemeinsam genutzt werden.
Keine lokalen Dateisystem-Schreibvorgänge, die Sie wieder lesen möchten. Uploads, die von einer Instanz auf die lokale Festplatte geschrieben werden, sind für die anderen unsichtbar. Schreiben Sie in gemeinsamen Speicher.
Keine ungeschützten geplanten Arbeitsaufgaben. Wenn ein Timer in der App läuft, führt jede Instanz ihn aus. Bei vier Instanzen läuft ein nächtlicher Job vier Mal. Verschieben Sie geplante Arbeitsaufgaben in einen Cron-Job oder schützen Sie sie mit einer Sperre. Siehe Cron Jobs.
Keine Annahme, dass die Instanzanzahl stabil ist. Alles, das Arbeitsaufgaben nach Instanz-Index aufteilt, funktioniert nicht mehr, wenn sich die Anzahl ändert.
Wenn eines davon auf Ihre App zutrifft, beheben Sie es vor der Aktivierung der Auto-Skalierung. Eine App, die nicht cluster-sicher ist, funktioniert auf intermittierende und schwer zu reproduzierende Weise nicht richtig, da dies davon abhängt, welche Instanz welche Anfrage bedient hat.
Fehlerbehebung
Die Umschaltfläche lässt sich nicht aktivieren. Zum Aktivieren wird die Schreibberechtigung für die Website benötigt. Bei einer schreibgeschützten Rolle sind die Steuerelemente deaktiviert.
Die App ist neu gestartet, als ich Auto-Skalierung aktiviert habe. Erwartet. Das Umschalten auf Cluster-Modus erfordert einen Neustart, und das geschieht einmal.
Benutzer werden zufällig abgemeldet. Klassisches Symptom, das nicht cluster-sicher ist. Sitzungen sind im Speicher und Anfragen landen auf verschiedenen Instanzen.
Instanzen skalerten hoch und kamen nie herunter. Entweder blieb die Last über dem Scale-down-Schwellwert, oder etwas hält die CPU unabhängig vom Datenverkehr hoch. Überprüfen Sie die Ereignisliste und schauen Sie, was die App wirklich tut.
Ein geplanter Job lief mehrmals. Jede Instanz führte ihn aus. Verschieben Sie ihn in einen Cron-Job oder fügen Sie eine Sperre hinzu.
Nichts wird skaliert. Bestätigen Sie, dass die Umschaltfläche an ist, die App läuft und der Cluster-Modus aktiviert ist. Überprüfen Sie dann, ob die CPU den Scale-up-Schwellwert in der Ereignisliste tatsächlich überschritten hat.
Die Kosten sind höher als erwartet. Überprüfen Sie die Ereignisliste auf Flapping und senken Sie dann die maximale Instanzanzahl.
Ähnliche Seiten
- Site Performance and APM um zu sehen, ob CPU tatsächlich der Engpass ist.
- Site Uptime Monitoring um zu bestätigen, dass Skalierung tatsächlich die Verfügbarkeit verbessert.
- Cron Jobs für geplante Arbeitsaufgaben, die genau einmal ausgeführt werden müssen.
- Resizing a Cloud Server falls Sie eine größere Maschine statt mehr Instanzen benötigen.