Frage

Ich habe eine Last ausgeglichen enviorment mit mehr als 10 Web-Server IIS ausgeführt wird. Alle Websites werden den Zugriff auf eine einzelne Dateispeicher, der alle Bilder hostet. Wir haben derzeit 200 GB Bilder - wir speichern sie in Verzeichnisse von 1000 Bildern pro Verzeichnis. Gerade jetzt alle Bilder sind in einem einzigen Speichergerät (RAID 10), die mit einem einzigen Server, der als Dateiserver dient. All Web-Server wird auf den Dateiserver auf dem gleichen LAN verbunden. Ich suche die Architektur zu verbessern, so dass wir keinen Single Point of Failure haben würden. Ich erwäge zwei Alternativen:

  1. Replizieren Sie die Speicherung von Dateien auf alle der Web-Servern, so dass sie alle auf die Daten zugreifen lokal
  2. replizieren die Speicherung von Dateien auf einen anderen Speicher so, wenn etwas auf den aktuellen Speicher geschieht, werden wir es wechseln würden.

Offensichtlich sind die wichtigsten Operationen auf dem Dateispeicher getan werden gelesen, aber es gibt auch viele Schreiboperationen. Was denken Sie, ist die bevorzugte Methode? Jede andere Idee?

Ich bin derzeit herrschende Verwendung von CDN, wie es wird eine Architektur Änderung auf der Anwendung erfordern, die wir jetzt nicht machen.

Keine korrekte Lösung

Andere Tipps

Einige Dinge, die ich normalerweise, bevor er für Bogenwechsel berücksichtigen würde, ist

  1. Was sind die Themen der aktuellen arch
  2. , was ich mit dem aktuellen Bogen falsch mache.
  3. (falls dies für eine Weile gearbeitet hatte, kleinere Verbesserungen werden in der Regel eine Menge Probleme lösen)
  4. wird es mir erlauben, leicht zu wachsen (hier wird es immer eine obere Grenze). Auf der Grundlage der Vergangenheit Wachstum von Daten, können Sie planen, es effektiv.
  5. Zuverlässigkeit
  6. leicht zu pflegen / Monitor / troubleshoot
  7. Kosten

200 GB ist nicht eine Menge von Daten, und Sie können für einige home grown-Lösung gehen oder so etwas wie ein NAS verwenden, die Sie später erweitern können. Und hat einen Hot-Swap-Replik davon.

Replizieren der Speicherung aller Webserver ist eine sehr teuere Einrichtung, und wie Sie sagt, dass es eine Menge von Schreiboperationen ist, wird es in der Replikation auf alle Server einen großen Overhead (die mit der Anzahl der Server nur erhöhen und wachsenden Daten). Und es gibt auch die Frage der veralteten Daten von einem der anderen Knoten bedient wird. Abgesehen davon, dass zur Fehlerbehebung Probleme bei der Replikation werden ein Chaos mit 10 und wachsendem Knoten sein. Es sei denn, die Lookup / Lesen / Schreiben von Dateien sehr zeitkritisch ist, ist die Web-Servern zu replizieren alle keine gute Idee. Benutzer (Web) werden kaum bemerken den Unterschied von 100 ms - 200 ms in Ladezeit.

Es gibt einige Unternehmen Lösungen für diese Art der Sache. Aber ich zweifle nicht daran, dass sie teuer sind. NAS nicht gut skalieren. Und Sie haben einen Single Point of Failure, die nicht gut ist.

Es gibt einige Möglichkeiten, wie Sie den Code zu helfen, mit diesem schreiben können. Sie könnten die Bilder auf dem Web-Server zum ersten Mal cachen sie angefordert werden, wird dies die Last auf dem Bildserver reduzieren.

Sie können einen Master-Slave bekommen einrichten, so dass Sie ein Haupt-Bildserver, sondern auch andere Server haben, die sich daraus kopieren. Sie könnten diese Lastenausgleich und eine gewisse Logik in Ihrem Code setzen, so dass, wenn ein Slave keine Kopie eines Bildes hat, Sie auf dem Master zu überprüfen. Sie können auch diese nach Priorität zuweisen, so dass, wenn der Master nicht verfügbar die erste Slave ist dann der Meister wird.

Da Sie so wenig Daten in Ihrem Speicher haben, macht es Sinn, mehrere große HDs zu kaufen oder den freien Speicherplatz auf dem Web-Server verwenden, Kopien zu halten. Es wird die Belastung für die Back-End-Speichersystem herunternehmen und, wenn es ausfällt, können Sie immer noch Inhalte für Ihre Benutzer liefern. Noch besser, wenn Sie skalieren müssen (weitere Downloads), können Sie einfach einen neuen Server hinzufügen und den Stress auf dem Back-End wird sich nicht ändern, viel.

Wenn ich dies zu tun hätte, würde ich benutzen rsync oder unisono die Bilddateien in dem exakt gleichen Platz auf dem Web-Server, wo sie auf kopieren die Speichervorrichtung (auf diese Weise können Sie die Kopie mit einem Netzwerk-Dateisystem einhängen jederzeit tauschen).

Ausführen jeder jetzt rsync und dann (zum Beispiel nach jedem Upload oder einmal in der Nacht, du wirst besser wissen, welche Größen Sie am besten paßt)

.

Eine vielseitigere Lösung wäre, ein P2P-Protokoll wie Bittorreent zu verwenden. Auf diese Weise können Sie alle Änderungen auf dem Speicher-Backend zu den Web-Servern veröffentlichen und sie würden die Updates optimieren automatcially.

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