Frage

Also habe ich mir den neuesten Stackoverflow-Podcast angehört (Folge 19), und Jeff und Joel sprachen ein wenig über die Skalierung der Serverhardware, wenn eine Website wächst.Nach dem, was Joel gesagt hat, sind die ersten paar Schritte ziemlich normal:

  1. Ein Server, auf dem sowohl der Webserver als auch die Datenbank ausgeführt werden (das aktuelle Stackoverflow-Setup)
  2. Ein Webserver und ein Datenbankserver
  3. Zwei Webserver mit Lastausgleich und ein Datenbankserver

Sie sprachen jedoch nicht viel darüber, was als nächstes kommt.Fügen Sie weitere Webserver hinzu?Ein anderer Datenbankserver?Aus Redundanzgründen diesen Drei-Maschinen-Cluster in einem anderen Rechenzentrum replizieren?Wie geht es einem Web-Startup in der Hardware-Abteilung weiter?

War es hilfreich?

Lösung

Ein vernünftiges Setup zur Unterstützung einer „durchschnittlichen“ Webanwendung könnte wie folgt aussehen:

  1. Einzelner kombinierter Anwendungs-/Datenbankserver
  2. Separate Datenbank auf einem anderen Computer
  3. Zweiter Anwendungsserver mit DNS-Round-Robin (Load-Balancing des armen Mannes) oder z.B. Perlbal
  4. Zweitens, replizierter Datenbankserver (für Lesevorgänge sind einige Änderungen an der Anwendungslogik erforderlich, damit berechtigte Datenbanklesevorgänge an einen Slave gehen)

An diesem Punkt würde die Bewertung des aktuellen Stands helfen, einen besseren Skalierungspfad zu bestimmen.Wenn beispielsweise die Leselast hoch ist und sich Inhalte nicht allzu oft ändern, ist es möglicherweise besser, den Schwerpunkt auf Caching zu legen und dedizierte Front-End-Caches einzuführen, z. B. Tintenfisch um unnötige Datenbank-Lesevorgänge zu vermeiden, müssen Sie jedoch überlegen, wie Sie die Datenbank pflegen Cache-Kohärenz, normalerweise in der Anwendung.

Wenn sich der Inhalt hingegen relativ häufig ändert, bevorzugen Sie wahrscheinlich eine verteiltere Lösung.Führen Sie einige weitere Anwendungsserver und Datenbank-Slaves ein, um die Auswirkungen abzumildern, und verwenden Sie Objekt-Caching, z zwischengespeichert um zu vermeiden, dass weniger flüchtige Inhalte in die Datenbank gelangen.

Für die meisten Websites ist dies wahrscheinlich ausreichend. Wenn Sie jedoch zu einem globalen Phänomen werden, sollten Sie wahrscheinlich darüber nachdenken, Hardware in regionalen Rechenzentren einzurichten und Tricks wie geografische Lastverteilung zu verwenden, um Besucher zum nächstgelegenen „Cluster“ zu leiten ".Zu diesem Zeitpunkt werden Sie wahrscheinlich in der Lage sein, Ingenieure einzustellen, die wirklich Feinabstimmungen vornehmen können.

Der wahrscheinlich wertvollste Skalierungsratschlag, der mir einfällt, wäre, sich nicht viel zu früh darüber Gedanken zu machen;Konzentrieren Sie sich auf die Entwicklung eines Dienstes, den die Benutzer nutzen möchten, und darauf, die Anwendung einigermaßen robust zu machen.Einige einfache frühe Optimierungen bestehen darin, sicherzustellen, dass Ihr Datenbankdesign einigermaßen solide ist und dass Indizes so eingerichtet sind, dass Sie nichts schmerzhaft Verrücktes tun;Stellen Sie außerdem sicher, dass die Anwendung Cache-Kontrollheader ausgibt, die Browser anweisen, wie die Daten zwischengespeichert werden sollen.Wenn Sie diese Art von Arbeit zu Beginn des Entwurfs durchführen, kann dies später von Vorteil sein, insbesondere wenn Sie nicht das Ganze überarbeiten müssen, um Probleme mit der Cache-Kohärenz zu lösen.

Der zweitwichtigste Rat, den ich Ihnen geben möchte, ist, dass Sie nicht davon ausgehen sollten, dass das, was für eine andere Website funktioniert, auch für Sie funktioniert.Überprüfen Sie Ihre Protokolle, führen Sie eine Analyse Ihres Datenverkehrs durch und profilieren Sie Ihre Anwendung – sehen Sie, wo Ihre Engpässe liegen, und beheben Sie sie.

Andere Tipps

Joel erwähnte das Hinzufügen eines zweiten Rechenzentrums mit demselben Setup und die anschließende zufällige Zuweisung Ihrer Benutzer zu jedem.Änderungen an den Daten werden protokolliert und von einem Standort zum anderen gesendet, sodass beide Standorte alle Daten enthalten.

Der Vortrag Scalable Web Architectures Common Patterns & Approaches von Cal Henderson (Yahoo) auf der Web 2.0 Expo war sehr interessant.Ich dachte, es gäbe ein Video, konnte es aber nicht finden.Aber hier sind die Folien:

http://www.slideshare.net/techdude/scalable-web-architectures-common-patterns-and-approaches

Ein bestimmter nächster Schritt wäre ein Cluster von Webservern (eine Webfarm) und ein Clustersystem von Datenbankservern (Replikation oder Oracle RAC usw.).usw.)

Wenn Sie sich für das Caching und die Verwendung von .Net interessieren, schauen Sie sich das an Anwendungs-Caching-Block in der Unternehmensbibliothek (verwenden Sie dies natürlich zusammen mit den anderen oben genannten Punkten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top