Wie skaliert man eine Webanwendung?

Wie skaliert man eine Webanwendung?

Ich bin in erster Linie Webanwendungsentwickler und weiß nicht viel über Skalierungs-/Skalierbarkeitstechniken. Meine Anwendung ist in Python geschrieben und verwendet Django; ein ziemlich standardmäßiges Setup.

Ich verwende derzeit Apache 2.2 für meinen Webserver und MySQL für meinen Datenbankserver; beide laufen auf demselben VPS.

Bisher handelte es sich im Wesentlichen um einen Prototyp mit lediglich 15 bis 30 gleichzeitigen Benutzern. Ich hatte also keine Probleme. Da wir jetzt jedoch weitere Benutzer hinzufügen, werden wir Leistungsprobleme haben.

Meine Frage ist also, wie ich meine Webanwendung skalieren kann. Mein aktueller Plan sieht wie folgt aus:

  1. Jetzt habe ich nur einen VPS-Server laufen, Apache + MySQL.
  2. Als Nächstes plane ich, einen weiteren VPS-Server hinzuzufügen, um nur MySQL auszuführen, sodass ich einen Webserver und einen DB-Server habe.
  3. Als Nächstes füge ich dem Webserver Memcache zum Zwischenspeichern von Daten hinzu, um MySQL zu entlasten.
  4. Als Nächstes ein weiterer Webserver zum Bereitstellen aller statischen Inhalte.
  5. Als nächstes ein VPS-Server zum Lastenausgleich (nginx/varnish), hinter dem meine beiden Webserver und dann der DB-Server liegen würden.

Klingt das nach einer praktikablen Strategie? Bitte helfen Sie mir hier weiter.

Antwort1

Wissen Sie, wo Ihr erster Engpass liegt? Wenn nicht, wie haben Sie die Reihenfolge der zu erledigenden Aufgaben festgelegt?

Das heißt, wenn Sie in Ihrer App nichts schrecklich falsch gemacht haben, wird die erste Grenze, an die Sie wahrscheinlich stoßen, der durch die Datenbank verursachte Festplatten-E/A sein, und Ihre Strategie wird wahrscheinlich eine gute Wahl sein.

Das Verschieben der Datenbank auf eine andere physische Festplatte sollte sehr hilfreich sein und Ihre erste Maßnahme sein. Je nach den von Ihnen verwendeten Systemen kann es beispielsweise keinen oder einen großen Unterschied machen, ob Sie eine zweite Festplatte auf dem aktuellen Host verwenden oder auf einen völlig separaten Server verschieben. Sie arbeiten auf VPSes. Wenn Ihre Festplatte an E/A gebunden ist, wird das Verschieben auf einen zweiten VPS wahrscheinlich nicht viel helfen, wenn dieser zufällig denselben Speicher verwendet (dieselbe Festplatte oder dasselbe SAN oder was auch immer) – aber dieses letzte Problem sollte von Ihrem VPS-Anbieter behoben werden.

Antwort2

Ich empfehle zu lesenSkalierbare Internet-Architekturenvon Theo Schlossnagle. Das Buch beschreibt die gesamte Theorie und Praxis der Skalierung von Anwendungen zwischen Servern, der Sicherstellung, dass keine einzelnen Ausfallpunkte vorhanden sind, der Skalierung von Datenbanken usw.

Ihr Plan klingt allerdings wie der erste Schritt zur Skalierung. Normalerweise beginnt alles auf einem Server, dann trennt man Web und Datenbank, fügt einen Reverse-Proxy oder Load Balancer hinzu und betreibt mehrere Webserver und so weiter.

Antwort3

Sie können nichts verbessern, was Sie nicht messen. Zuerst sollten Sie herausfinden, wo Ihr Engpass liegt. Sie können jetzt atop verwenden und eine Art Überwachung einrichten, falls Sie dies noch nicht getan haben. Wenn alles gut läuft, können Sie mit JMeter eine realistische Last erzeugen.

Hier finden Sie weitere Informationen zur Infrastruktur, die Sie rund um Ihre Django-App aufbauen sollten.

verwandte Informationen