it-swarm.com.de

Welche potenziellen Probleme muss ich in einer Umgebung mit mehreren Servern / Clustern berücksichtigen?

Ich arbeite seit einiger Zeit mit einem Kunden an einer Website, und die Website selbst erfreut sich immer größerer Beliebtheit. Wir befinden uns jetzt in der Phase, in der der einzelne Computer, auf dem wir die Site hosten, Probleme hat, die Anforderungen aufrechtzuerhalten, und wir haben die Site selbst so weit wie möglich optimiert (Caching usw.).

Wir sind jetzt in der Phase, in der wir einen weiteren Server hinzufügen müssen, um die zusätzliche Belastung zu bewältigen, die zu meiner Frage führt: Welche potenziellen Gefahren und Vorbehalte muss ich beachten oder testen, wenn ich auf eine Webfarm oder ein Cluster-Hosting umsteige? Umgebung?

3
Wolfwyrd

Es gibt mehrere mögliche Einschränkungen:

Sitzungen

Wenn Sitzungen serverseitig gespeichert sind (d. H. PHP) , benötigen beide Server Zugriff auf einen gemeinsam genutzten Sitzungsspeicherpfad. Andernfalls verlieren Sie Sitzungen, wenn der Load Balancer eine Anforderung von einem Server an den anderen sendet oder möglicherweise einen Benutzer mit zwei eindeutigen Sitzungen hat. Dies kann bei AJAX besonders frustrierend sein. Abhängig von Ihrem Load Balancer sind möglicherweise auch 'Sticky'-Sitzungen möglich.

Temporäre Dateien

Beide Server sollten dasselbe Verzeichnis/tmp verwenden, wenn Sie tatsächlich temporäre Dateien verwenden, um Anforderungen zu bearbeiten. Dies kann ein temporäres Archiv sein, das für einen Download komprimiert wird, eine Flatfile-DB, die etwas verfolgt, was auch immer.

SQLite Locking

Wenn Sie SQLite3 verwenden, werden Sie möglicherweise einige Macken bemerken, die noch nie aufgetaucht sind, insbesondere, wenn Sie so etwas wie NFS verwenden, um die Datenbankdateien zwischen den Servern freizugeben. NFS ist damit langsam, daher empfehle ich, etwas anderes zu verwenden. Verteilte Dateisysteme wie Luster sind einfach einzurichten, oder Sie können GFS/OCFS2 verwenden.

SSL

Sie möchten wahrscheinlich, dass der Load Balancer den SSL-Handshake verarbeitet, der dann die Anforderung an die Back-End-Server mithilfe eines alten selbstsignierten Zertifikats sendet.

Einige allgemeine Hinweise:

  • Verwenden Sie, wie bereits erwähnt, ein leistungsstarkes Dateisystem zum Freigeben von Verzeichnissen. Alle freigegebenen Dateien sollten sich im Netzwerkspeicher befinden, nicht auf einem der Webserver. Andernfalls, wenn man untergeht, sind beide nutzlos, was den Zweck zunichte macht.

  • Wenn die Site ein RDBMS verwendet, haben Sie zwei Möglichkeiten. Führen Sie es auf beiden Knoten aus und verwenden Sie eine Master-Master-Synchronisation, oder stellen Sie den DB-Server in ein eigenes Zuhause. Ich empfehle die zweite, da Ihre Webserver dadurch viel mehr Spielraum haben.

  • Load Balancer benötigen ebenfalls Redundanz.

In den meisten Fällen können Sie von einem einzelnen Server zu einer Farm mit Lastenausgleich wechseln, ohne Änderungen an der tatsächlichen Site/Anwendung selbst vorzunehmen. Sie müssen jedoch sicherstellen, dass alle Knoten in der Lage sind, dieselben Dateien zu lesen und zu schreiben. Möglicherweise müssen Sie eine Logik zum Sperren der App selbst hinzufügen.

1
Tim Post

Der Sitzungsstatus (falls dies ein Problem ist) ist ein potenzielles Problem. Die meisten Load Balancing-Appliances können "Sticky Sessions" verwenden. Dies bedeutet, dass ein Benutzer, der zum Starten auf SERVER1 landet, auf SERVER1 verbleibt, normalerweise mithilfe eines Cookies, das im Browser-Speicher gespeichert ist. Der einzige Nachteil dabei ist, dass sich der Benutzer erneut auf einem anderen Server anmelden muss, wenn SERVER1 aus irgendeinem Grund offline geschaltet wird.

Ich habe damit begonnen, dies in meinen Apps (CF-Apps) zu umgehen, indem ich Sitzungen in der Serverfarm freigegeben habe. Ein Systemausfall hat also keine Auswirkungen auf die Benutzererfahrung.

Die einzige andere Herausforderung bestand darin, den Inhalt korrekt auf alle Server in der Farm zu replizieren. Dafür gibt es Software (Robocopy, Fling von NCH-Software sind zwei, die ich verwendet habe), aber es gab immer noch Fälle, in denen die Synchronisierung nicht 100% der Zeit funktionierte.

0
Milner

Interessiert sich Ihre Bewerbung für den Staat? Wenn ein Benutzer eine Anfrage von einem Computer und eine andere von einem anderen Computer erhalten hat, spielt es dann eine Rolle? Wenn Sie zwischen den Anforderungen einen bestimmten Status beibehalten müssen, ist alles komplizierter und es gibt verschiedene Möglichkeiten, das Problem zu lösen.

Wenn Sie sich keine Sorgen um den Zustand machen müssen, dann ist der Aufbau Ihrer Site eine gute Aufgabe, und mit einem Proxy und einigen Back-End-Servern sollten die Dinge relativ in Ordnung sein.

Wenn Sie den Status beibehalten müssen, gibt es verschiedene Möglichkeiten, eine Sticky-Sitzung über den Proxy zu erstellen, sodass derselbe Back-End-Server alle Anforderungen eines einzelnen Benutzers verarbeitet. Es gibt jedoch auch eine Reihe von Faktoren, die es schwierig machen, diese Sitzungen zu halten .

Sie können den Status auch auf einem gemeinsamen Medium im Backend beibehalten, sodass jeder Server für denselben Benutzer denselben Status lädt. Sie können dies mit einer Datenbank (möglicherweise zu langsam) oder so ähnlich wie zwischengespeichert tun.

Erweitern Sie auch die Anzahl der Datenbankserver? Das wird eine Reihe weiterer Probleme mit sich bringen, über die man sich Sorgen machen muss.

Einige der Sitzungsprobleme werden im Stapelüberlauf-Podcast Nummer 6 behandelt

Stellen Sie zum Testen sicher, dass Sie einen ähnlichen Testcluster hart treffen, damit Sie sehen können, wie Ihre Anforderungen bei der Weiterleitung über viele Server verlaufen, da bei vielen Anforderungen desselben Clients an verschiedene Backends wahrscheinlich Probleme auftreten. Stellen Sie daher sicher, dass Sie Probleme haben Etwas in Ihrem Testplan bewirkt, dass dies geschieht.

Vielleicht möchten Sie auch etwas über Stack Overflow lesen network config

0
danivovich