it-swarm.com.de

Rollende Updates in einer Webserverfarm?

Große Websites (Amazon, Facebook, Yahoo usw.) planen keine Ausfallzeiten für Upgrades. Normalerweise werden sie "live" ausgeführt und schrittweise durch die Serverfarm gerollt. Sie haben auch eine große Infrastruktur und Teams, um dies zu verwalten.

Bei kleineren Websites wird normalerweise die gesamte Website offline geschaltet, um die Datenbankstruktur zu aktualisieren und den auf den Webservern ausgeführten Code zu aktualisieren. Die Ausfallzeit kann sehr gering sein, ist aber dennoch eine Unterbrechung für die Kunden.

Wie sind Sie zu aktualisierenden Updates ohne Ausfallzeiten gekommen? Was sind die Mindestanforderungen, um dies zu erreichen? Was können wir tun, um Anwendungen zu erstellen, die dies von Anfang an ermöglichen?

5

Was sind die Mindestanforderungen, um dies zu erreichen?

Wenn sich hinter einem Load-Balancer mindestens zwei Server befinden, können Sie einen Server nacheinander aus dem Cluster entfernen, aktualisieren und wieder zum Cluster hinzufügen, um die Aktualisierung abzuschließen (sofern der Besucher betroffen ist).

Was können wir tun, um Anwendungen zu erstellen, die dies von Anfang an ermöglichen?

Entwerfen Sie Ihre Anwendung unter Berücksichtigung von Lastenausgleichsanforderungen .

5
danlefree

0 Ausfallzeit entspricht dem Webserver "Das Design muss in jedem Browser gleich aussehen." Geplante Ausfallzeiten sind in Ordnung. Planen Sie sie einfach und machen Sie eine statische Meldung. Es sei denn, es kostet Sie tatsächlich Tonnen von Hits oder Geld, was als kleine Website keine Definition wäre. Wenn Sie nicht möchten, dass es irgendjemand im Laufe des vierten Juli (oder Thanksgiving oder einem anderen günstigen Moment) sieht, werden Sie es sein, es sei denn, Ihre Website ist das erste Google-Suchergebnis für "Feuerwerk-Verbrennungsbehandlung" oder "Francis Scott Key Lyrics" Alles gut.

Dies von Anfang an zu tun, führt normalerweise zu einem viel größeren Risiko: Überentwicklung.

0
Thomas

Es gibt immer einen Grund für geplante Ausfallzeiten, diese können jedoch minimiert werden.

Je nach Infrastruktur können unterschiedliche Strategien Ausfallzeiten minimieren. Regelmäßige Updates sollten keine Ausfallzeiten erfordern.

Auf einer Reihe von PHP-gesteuerten Sites, die ich verwalte, verwalte ich Kopien der Codebasis nebeneinander, sagen wir mal Version 1.0, 1.1 und 1.2:

/sites/site-1-0-0
/sites/site-1-1-0
/sites/site-1-2-0

Erstellen Sie dann Symlinks, die der Webserver verwenden kann:

/sites/production --> /sites/site-1-1-0
/sites/staging    --> /sites/site-1-2-0

Auf diese Weise kann ich meinen Code auf dem Produktionsserver bereitstellen, um in letzter Minute die ordnungsgemäße Funktion zu überprüfen. Wenn ich live gehen möchte, gehe ich einfach folgendermaßen vor:

$ rm /sites/production; ln -s /sites/site-1-2-0 /sites/production

Der Webserver verwendet die Symlinks in der DocumentRoot-Spezifikation, sodass die Umstellung praktisch sofort erfolgt.

Natürlich gibt es hier Fallstricke. Man muss sicherstellen, dass externe Daten irgendwo, ähm, extern gespeichert werden. Sie möchten keine temporären Dateien schreiben oder benutzergenerierten Inhalt im Dateisystem unter den Verzeichnissen site-x-y-z speichern.

Eine andere Alternative, wenn Sie mehrere Server haben, besteht darin, die Umschaltung über das Routing vorzunehmen. Einige VPS-Anbieter (Linode fällt mir ein) machen es einfach, zwei virtuelle Maschinen zu nehmen und ihre IP-Adressen auszutauschen. Sie richten also Ihre neue Version auf einem neuen Server ein, führen alle erforderlichen Tests durch und tauschen dann die IP-Adressen aus, um Ihr Update bereitzustellen. Die gleichen Probleme bezüglich der Aktualisierung von Nicht-Code-Assets gelten, aber einige sorgfältige Überlegungen und Planungen können dazu führen, dass dies kein Problem darstellt.

Mit robusteren, lastausgeglichenen Setups funktionieren auch Strategien, wie sie in danlefrees Antwort vorgeschlagen wurden.

0
timdev