Best Practice zum Speichern wirklich großer Mengen von vom Benutzer hochgeladenen Bildern

Best Practice zum Speichern wirklich großer Mengen von vom Benutzer hochgeladenen Bildern

Wir haben derzeit eine Django-basierte Website, auf die Benutzer viele Bilder hochladen können. Alle Bilder werden auf unserem Server auf einer einzigen Festplatte gespeichert. Das Problem ist: Wir erreichen langsam die maximale Kapazität der verfügbaren Festplatten, sodass vertikale Skalierung keine Option mehr ist.

Soweit ich weiß, gibt es bei Amazon S3/CloudFront keine solche Beschränkung, aber für Websites mit hohem Datenverkehr sind diese Dienste viel teurer als unser eigenes Server-Rack. Gibt es eine bewährte Methode, um die Uploads in unserer eigenen Umgebung auf mehrere Festplatten aufzuteilen?

Antwort1

Das ist schlecht – in einer Serverumgebung, in der der Inhalt der Daten wichtig ist, sollten Sie zumindest RAID verwenden, um das erhebliche Risiko eines Festplattenausfalls zu verringern – und RAID ist auch eine Antwort auf Ihr Speicherproblem. Sie können ein RAID-Array verwenden, um die Kapazität Ihres Speichers zu erhöhen. (RAID wird verwendet, um mehrere Festplatten zu einer einzigen virtuellen Festplatte mit unterschiedlichen Leistungsmerkmalen und Redundanz zusammenzufassen.)

Es gibt auch andere Technologien, die Sie wirklich kennen und nutzen sollten. Sie haben Ihr Betriebssystem nicht angegeben, aber hoffentlich handelt es sich um eine Linux-Variante. In diesem Fall sollten Sie sich LVM ansehen, das die Datenträgerverwaltung übernimmt und unter anderem die Möglichkeit bietet, mehrere Datenträger zu einem einzigen virtuellen Datenträger zusammenzuführen – unterhalb der Betriebssystemebene.

Natürlich können Sie sich auch Dinge wie SANS ansehen, die normalerweise mehrere Festplatten nehmen und diese zu einer einzigen großen externen Festplatte zusammenführen können.

Antwort2

Vorausgesetzt, Sie möchten Cloud-basierte Dienste vermeiden, besteht der traditionelle Ansatz großer Unternehmen darin, Hardware oder Software zu beschaffen, mit der viele separate Festplatten zu einem einzigen logischen Dateisystem zusammengeführt werden können. Dafür gibt es viele Möglichkeiten. Ich werde einige aufzählen:

  • Durch die Verwendung verteilter Dateisysteme wie Glusterfs können Sie mehrere Server betreiben, von denen jeder über eine eigene CPU, einen eigenen RAM und einen eigenen Speicher verfügt, und ein einziges logisches Dateisystem von allen gemeinsam nutzen.

  • Sie können dieses verteilte Konzept auch noch einen Schritt weiterführen und das gesamte System von A bis Z clustern, so dass es aussieht, als würden Sie einen logischen Computer betreiben, während es sich in Wirklichkeit um eine Reihe vernetzter Computer handelt, die eng miteinander verbunden sind (vorzugsweise über ein Hochgeschwindigkeitsnetzwerk).

  • Sie können beim Kauf von Motherboards, Gehäusen, CPUs, RAM usw. sparen, indem Sie einen „Speicherserver“ anschaffen, einen mäßig leistungsstarken Server der Enterprise-Klasse, der an viele Festplatten angeschlossen ist – entweder direkt im Gehäuse installiert oder über Fibre Channel oder SAS an ein externes Speicherrack angeschlossen, das manchmal 60 oder sogar mehr Festplatten enthält. In diesen Konfigurationen werden die Festplatten normalerweise mithilfe eines Hardware-RAID-Controllers oder einer Backplane zu einem logischen Gerät zusammengefügt. Natürlich erreicht diese Methode irgendwann die maximale Kapazität, wenn Sie alle Festplatten haben, die in ein einzelnes Rack mit maximaler Festplattendichte passen. In diesem Fall könnten Sie die Kapazität erhöhen, indem Sie einen Cluster dieser Speicherserver auf Dateisystem- oder Systemebene einrichten.

Abhängig von der genauen Speichergröße, die Sie voraussichtlich in den nächsten NJahren benötigen (wobei N die Anzahl der Jahre ist, für die Sie im Voraus planen möchten), sind einige dieser Lösungen teurer oder schwieriger zu verwalten als andere.

Im Extremfall, in dem viele tausend Terabyte redundanter Speicher benötigt werden, in der Größenordnung dessen, was Amazon S3 seinen Downstream-Kunden zur Verfügung stellt, müssen Sie praktisch eine Art Clustersystem haben, normalerweise mit zentralisierter Infrastruktur zur Verwaltung. In diesen Fällen ist eine sehr schnelle Vernetzung zwischen den Knoten entscheidend, um eine gute Leistung aufrechtzuerhalten. Sehen Sie sich auf jeden Fall mindestens 10G-Ethernet an.

Gemessen an der Tatsache, dass Sie sagten, Sie laufen derzeit aufeine einzelne FestplatteDie wirtschaftlichste Möglichkeit, von hier aus zu skalieren, ohne die Skalierung völlig zu sprengen, wäre jedoch, einen 2U- oder 3U-Server zu kaufen, der 4 bis 8 Festplatten aufnehmen kann, und dort eine Reihe von Festplatten in RAID einzubauen. RAID10, RAID5 und RAID6 sind allesamt recht gängige Konfigurationen für diese Anzahl von Festplatten, aber wenn Sie sich für RAID5/RAID6 entscheiden, stellen Sie sicher, dass Sie einen Hardware-RAID-Controller verwenden, um eine übermäßige CPU-Last zu vermeiden.

Mit dieser Methode und den derzeit verfügbaren Festplatten können Sie wahrscheinlich bis zu 16 TB nutzbaren Speicher (mit Redundanz) skalieren. Beachten Sie jedoch, dass Festplatten mit größerer Kapazität auch langsamer sind, einen geringeren Durchsatz und höhere Reaktionszeiten aufweisen. Aus diesem Grund verwenden Websites mit sehr hohem Datenverkehr in der Regel Festplatten mit geringerer Kapazität. Dies bedeutet natürlich, dass Sie mehr benötigen.vonum die gleiche nutzbare Kapazität zu erreichen. :/

verwandte Informationen