Was ist die beste Lösung für den Dateispeicher für eine ASP.NET-Anwendung mit Lastenausgleich?

8

Wir haben eine ASP.NET File Delivery App (interne Benutzer hochladen, externe Benutzer herunterladen) und ich frage mich, was der beste Ansatz für die Verteilung von Dateien ist, so dass wir nicht einen einzigen Punkt des Scheiterns nur durch Speichern der App haben Dateien auf einem Server. Wir verteilen die Last der App auf mehrere Front-End-Webserver, was bedeutet, dass wir Dateien nicht einfach lokal auf dem Webserver speichern können.

In unserer aktuellen Konfiguration weisen wir auf eine Freigabe auf einer primären Datenbank / einem Dateiserver hin. Im Laufe des Tages kopieren wir den Inhalt der Freigabe auf dem primären Server zum Failover. Dieses Scneario stellt sicher, dass wir eine sekundäre Maschine mit ziemlich aktuellen Daten haben, aber wir wollen zu dem Punkt kommen, an dem wir von der primären zur Failover-Funktion und wieder zurück ohne Datenverlust oder Fehler in der Front-End-App wechseln können. Gerade jetzt ist es ein ziemlich manueller Prozess.

Mögliche Lösungen sind:

  • Robocopy. Einfach, aber es ist nicht einfach, einen Fehler zu beheben, ohne dass mehrere Jobs gleichzeitig ausgeführt werden (Kopieren von Daten hin und her)
  • Speichern Sie die Datei in einem BLOB in SQL Server 2005. Ich denke, das könnte ein Leistungsproblem sein, besonders bei großen Dateien.
  • Verwenden Sie die FILESTREAM-Typ in SQL Server 2008 . Wir spiegeln unsere Datenbank wider, so dass dies vielversprechend erscheint. Hat jemand damit Erfahrung?
  • Microsoft Distributed File System . Scheint wie Overkill von dem, was ich gelesen habe, da wir nur 2 Server verwalten müssen.

Wie lösen Sie normalerweise dieses Problem und was ist die beste Lösung?

    
icelava 21.01.2009, 01:01
quelle

6 Antworten

2

Betrachten Sie eine Cloud-Lösung wie AWS S3 . Es ist Pay für was Sie verwenden, skalierbar und verfügt über hohe Verfügbarkeit.

    
Al W 21.01.2009 05:51
quelle
1

Sie benötigen ein SAN mit RAID. Sie bauen diese Maschinen für die Betriebszeit.

Das ist wirklich eine IT-Frage ...

    
sliderhouserules 21.01.2009 02:12
quelle
1

Wenn es eine Vielzahl verschiedener Anwendungstypen gibt, die Informationen über das Medium einer zentralen Datenbank teilen, wäre das Speichern von Dateiinhalten direkt in der Datenbank im Allgemeinen eine gute Idee. Aber es scheint, dass Sie nur einen Typ in Ihrem Systemdesign haben - eine Webanwendung. Wenn es nur die Webserver sind, die jemals auf die Dateien zugreifen müssen und keine andere Anwendung mit der Datenbank interagiert, ist der Speicher im Dateisystem und nicht in der Datenbank im Allgemeinen immer noch ein besserer Ansatz. Natürlich hängt es wirklich von den komplizierten Anforderungen Ihres Systems ab.

Wenn Sie DFS nicht als praktikablen Ansatz betrachten, sollten Sie Failover-Clustering in Betracht ziehen Ihre Dateiserver-Schicht , wobei Ihre Dateien in einem externen freigegebenen Speicher (kein teures SAN, von dem ich glaube, dass es für Ihren Fall übertrieben ist, da DFS bereits unerreichbar ist) zwischen aktiven und passiven Dateiservern gespeichert werden. Wenn der aktive Dateiserver ausfällt, kann der passive Server die Lese- / Schreibvorgänge in den gemeinsam genutzten Speicher übernehmen und fortsetzen. Windows 2008-Clusterdiskettentreiber wurde für dieses Szenario (gemäß Artikel) gegenüber Windows 2003 verbessert, was auf die Anforderung einer Speicherlösung hinweist, die SCSI-3 (PR) -Befehle unterstützt.

    
icelava 21.01.2009 02:17
quelle
0

Ich stimme auf Hochverfügbarkeits-Websites:

  

Tun: Verwenden Sie Storage Area Network (SAN)

     

Warum: Leistung, Skalierbarkeit,   Zuverlässigkeit und Erweiterbarkeit. SAN ist   die ultimative Speicherlösung. SAN ist   eine riesige Box mit hunderten von Festplatten   im Inneren. Es hat viele Datenträger   Controller, viele Datenkanäle, viele   Cache-Speicher. Du hast das Höchste   Flexibilität bei RAID-Konfiguration,   Hinzufügen von beliebig vielen Festplatten in einem   RAID, Freigabe von Festplatten in mehreren RAID   Konfigurationen und so weiter. SAN hat   schnellere Festplattencontroller, mehr parallel   Rechenleistung und mehr Festplatten-Cache   Speicher als normale Controller, die   Du legst einen Server hinein. Also, du bekommst   besserer Datenträgerdurchsatz wenn Sie verwenden   SAN über lokale Festplatten. Du kannst erhöhen   und verringern Sie Volumen während, während   Ihre App läuft und nutzt die   Volumen. SAN kann automatisch spiegeln   Platten und bei Plattenausfall, es   bringt automatisch die Spiegel hoch   Festplatten und rekonfiguriert das RAID.

Vollständiger Artikel ist bei CodeProject.

Da ich momentan nicht das Budget für ein SAN habe, verlasse ich mich auf Option 1 (ROBOCOPY) von Ihrem Post. Aber die Dateien, die ich speichere, sind nicht einzigartig und können automatisch neu erstellt werden, wenn sie aus irgendeinem Grund sterben, so dass absolute Fehlertoleranz in meinem Fall notwendig ist.

    
DavGarcia 21.01.2009 01:10
quelle
0

Ich nehme an, das hängt von der Art des Downloadvolumens ab, das Sie sehen würden. Ich speichere Dateien in einer SQL Server 2005-Image-Spalte mit großem Erfolg. Wir sehen keine große Nachfrage nach diesen Dateien, daher ist die Leistung in unserer speziellen Situation wirklich kein großes Problem.

Einer der Vorteile des Speicherns der Dateien in der Datenbank besteht darin, dass die Notfallwiederherstellung ein Kinderspiel wird. Es wird auch viel einfacher, Dateiberechtigungen zu verwalten, da wir dies in der Datenbank verwalten können.

Windows Server verfügt über einen Dateireplikationsdienst, den ich nicht empfehlen würde. Wir haben das seit einiger Zeit benutzt und es hat viele Kopfschmerzen verursacht.

    
Jim Petkus 21.01.2009 02:02
quelle
0

DFS ist wahrscheinlich die einfachste Lösung für die Einrichtung, obwohl abhängig von der Zuverlässigkeit Ihres Netzwerks kann dies zeitweise nicht synchronisiert werden, was erfordert, dass Sie die Verbindung zu brechen und neu zu synchronisieren, was ziemlich schmerzhaft ist, um ehrlich zu sein.

Angesichts der obigen Ausführungen würde ich geneigt sein, eine SQL Server-Speicherlösung zu verwenden, da dies die Komplexität Ihres Systems verringert und nicht erhöht.

Führen Sie einige Tests durch, um zuerst festzustellen, ob die Leistung ein Problem darstellt.

    
Bravax 21.01.2009 15:48
quelle