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:
Wie lösen Sie normalerweise dieses Problem und was ist die beste Lösung?
Sie benötigen ein SAN mit RAID. Sie bauen diese Maschinen für die Betriebszeit.
Das ist wirklich eine IT-Frage ...
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.
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.
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.
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.
Tags und Links sql-server asp.net file infrastructure