2010-10-16 6 views
5

Dies mag eine grundlegende Frage sein, aber wie gehe ich vor, um Updates für den aktuell laufenden node.js-Code effizient bereitzustellen?Bereitstellen von Updates für die Produktion node.js code

Ich komme aus einem PHP, JavaScript (clientseitigen) Hintergrund, wo ich einfach Dateien überschreiben kann, wenn sie aktualisiert werden müssen und die Änderungen sofort auf der Production Site verfügbar sind.

Aber in node.js muss ich die vorhandenen Dateien überschreiben, dann herunterfahren und die Anwendung neu starten. Sollte ich über mögliche Ausfallzeiten besorgt sein? Für mich scheint das ein riskanter Ansatz als der PHP (Scripting) Weg. Es sei denn, ich habe einen Server-Cluster, in dem ich jeweils einen Server für Updates abmelden kann.

Welche Strategien gibt es dafür?

Antwort

2

In meinem Fall ist es ziemlich viel:

svn up; monit restart node

Dieses Node-Server wird als Kometen-Server mit langer Abfrage Kunden handeln, damit Kunden nur wieder, wie sie normalerweise tun würden. Das erste, was der Node-Server macht, ist die aktuelle Statusinformation aus der Datenbank zu holen, so dass alles in kürzester Zeit reibungslos läuft.

Ich glaube nicht, dass dies wirklich ein riskanter ist als eine svn up zu tun, um eine Reihe von PHP-Dateien zu aktualisieren. Wenn überhaupt, ist es ein bisschen sicherer. Wenn Sie ein großes PHP-Projekt aktualisieren, besteht die Möglichkeit (wenn es sich um eine Website mit hohem Datenverkehr handelt, ist es im Grunde eine 100% ige Chance), dass Sie während der Aktualisierung Anfragen über den Webserver erhalten. Dies bedeutet, dass Sie in derselben Anfrage aktualisierten und veralteten Code ausführen würden. Zumindest mit dem Node-Ansatz können Sie alles aktualisieren und den Node-Server neu starten und wissen, dass Ihr gesamter Code auf dem neuesten Stand ist.

2

Ich würde mir keine Sorgen machen über Ausfallzeiten, Sie sollten in der Lage sein, dies so kurz zu halten, dass die Chancen niemandem auffallen wird (töten Sie den Prozess und starten Sie es in einem Bash-Skript oder etwas, wenn Sie behalten möchten es zu einem Bruchteil einer Sekunde).

Noch besorgniserregender ist jedoch, dass viele Node-Anwendungen viele Zustandsinformationen im Speicher behalten, die beim Neustart verloren gehen. Wenn Sie beispielsweise eine Chat-Anwendung ausführen, erinnert sie sich unter Umständen nicht mehr daran, mit wem sie gesprochen haben oder in welchen Kanälen/Räumen sie sich befanden. Der Umgang damit ist eher ein Designproblem und sehr anwendungsspezifisch.

+0

Yup. Aus diesem Grund ist es sinnvoll, Sitzungsdaten beispielsweise in einer persistenten Datenbank anstatt in einem Speicher zu speichern. –

1

Einige der Cloud-Hosting-Anbieter Node.js (wie NodeJitsu oder Windows Azure) behalten beide Versionen Ihrer Website auf separaten Verzeichnissen und leiten den Verkehr von einer Version auf die neue Version um, sobald die neue Version vollständig ist bereitgestellt.

Dies ist normalerweise eine integrierte Funktion von Platform as a Service (PaaS) -Providern. Wenn Sie jedoch Ihre Server verwalten, müssen Sie etwas erstellen, das den Datenverkehr von einer Version zur nächsten ermöglicht, sobald die neue Version vollständig bereitgestellt wurde.

Ein Vorteil dieses Ansatzes ist, dass Rollbacks dann einfach sind, da die vorherige Version intakt auf der Site bleibt.

1

Wenn Ihre Anwendung "node.js" nicht überspringen kann, was bedeutet, dass sie unter ständigem Beschuss eingehender Anfragen steht, können Sie sich die Ausfallzeit eines schnellen Neustarts einfach nicht leisten (selbst mit nodemon). Ich denke in einigen Fällen möchten Sie einfach einen nahtlosen Neustart Ihrer node.js Apps. Dazu verwende ich nichts: Zero Downtime-Bereitstellung für Ihren Knoten.js-Server, der die integrierte Cluster-API verwendet

Verwandte Themen