Wie speichere ich Terabyte großer Dateien mit zufälligem Zugriff?


7

Nehmen wir an, ich habe ein paar tausend große Dateien (jeweils 1-800 MB), auf die alle nach dem Zufallsprinzip zugegriffen wird, wobei auf neu hochgeladene Dateien sehr häufig zugegriffen wird. Mit der Zeit fallen die Zugriffszeiten umgekehrt quadratisch ab, aber dort Möglicherweise handelt es sich um zufällige Spitzen bei der Verwendung älterer Dateien.

Der Gesamtdurchsatz liegt im Bereich von 2 bis 4 Gbit.

Ich bin auf der Suche nach einer selbst gehosteten Lösung, nicht nach den Amazon-Angeboten, da diese viel zu teuer sind.

Was ich grob im Sinn hatte, ist Folgendes:

Teurer "Hauptserver" mit mehreren SAS-Laufwerken (oder SSDs) mit 15.000 U / min, auf denen neue Dateien gehostet werden, die gerade auf die Site hochgeladen wurden. Sobald die Download-Rate sinkt (oder die Datei ein bestimmtes Alter erreicht), wird sie auf einen der billigeren Archivknoten verschoben.

BEARBEITEN: Dateien sollen über HTTP an eine Vielzahl von Benutzern geliefert werden. Auf den Servern wird FC5 ausgeführt. Benötigen Sie meistens Lesezugriff, aber Schreiben ist auch wichtig.

Im Moment habe ich ein einfaches 2-Server-Setup mit maximal einem Gbit und ich werde verrückt nach E / A. Die Box ist mit 4K-Blöcken formatiert. Würde eine Erhöhung auf 1024K einen enormen Einfluss haben?


Ich bin selbst neugierig. Ich würde nicht glauben, dass selbst gehostete Kosten S3 übertreffen können, insbesondere wenn die Bandbreite berücksichtigt wird.
Tomjedrz

Laut Amazon-Preisen würde die Bereitstellung von 1 GB Datenverkehr 30.000 US-Dollar pro Monat kosten. Sie können eine 1-Gbit-Leitung mit einem Server für 1/10 erhalten. Es kann für 1/5 auf Super-Premium-Bandbreite sein.

1
Wie viele Benutzer laden / laden hoch? Wenn es viele gibt, können Sie möglicherweise Bittorrent verwenden, um den Prozess zu dezentralisieren.
MattB

Was für ein Zugang? (Die Antwort ist anders, wenn die Dateien schreibgeschützt oder schreibgeschützt sein sollen)
voretaq7

+1 für das Einmischen mit einem DIY-Ansatz. 30k / Monat ist lächerlich.
Matt

Antworten:


1

Wenn Sie diese Daten nur lokal bereitstellen, können Sie mithilfe von Standardkomponenten problemlos einen einzelnen Server mit einigen Terabyte Speicherplatz zusammenstellen. Wenn Sie ein paar Gigabit-Netzwerkkarten zusammenstellen, erhalten Sie möglicherweise den Netzwerkdurchsatz.

Wenn der Inhalt über größere Entfernungen bereitgestellt werden muss, ist es möglicherweise besser, die Daten über mehrere Felder zu replizieren. Wenn Sie es sich leisten können, können Sie die Daten vollständig replizieren. Wenn Dateien nie überschrieben werden, können grobe, auf Zeitstempeln basierende Replikationsskripte funktionieren.

Andernfalls könnten Sie sich parallele Dateisystemimplementierungen ansehen. Wenn Sie eine kostenlose Version wünschen, können Sie sich Lustre (für Linux) oder Hadoop (Multiplattform) ansehen.


1

All dies ist von Bedeutung:

1) viel RAM

2) mehrere Netzwerkkarten und / oder Frontends, um Engpässe zu reduzieren

3) Reverse-Proxy-Server wie Squid (siehe z. B. http://www.visolve.com/squid/whitepapers/reverseproxy.php ) oder Varnish

4) RAID-Setup für Festplatten (Streifen- oder Streifen / Spiegel-Kombination möglicherweise)

5) Auswahl des richtigen Dateisystems und, ja, der Blockgröße. XFS war früher eine gute Leistung für große Datenmengen, wahrscheinlich ist ZFS jetzt besser.

Das alles sollte helfen. Wie viel und was davon implementiert werden muss, sollten Sie in der Lage sein, basierend auf Ihren Zielanforderungen zu berechnen (dh die gesamte Nettobandbreite, die Sie nutzen möchten, den Durchsatz einer einzelnen Karte, den maximalen Durchsatz Ihrer Festplatten, die nicht überfallen und überfallen wurden usw.).


1
+1 für viel RAM in Verbindung mit XFS oder ZFS. Sehr empfehlenswert für große Volumes (und große Dateien).
Pause

1

Was Sie vorschlagen, ist eine automatisierte abgestufte Speicherlösung. Dies ist keine triviale Leistung. Einige High-End-Speicheranbieter wie EMC werben für automatisierte Tiering-Lösungen, sind jedoch auf Top-End-LAN-Lösungen für Unternehmen ausgerichtet und haben einen entsprechenden Preis.

Sie sollten sich das ZFS-Speichersystem von Sun ansehen, da es die Art von Funktionen ankündigt, nach denen Sie suchen, und möglicherweise auch näher am Preis liegt.

http://blogs.oracle.com/studler/entry/zfs_and_the_hybrid_storage


1
FreeBSD unterstützt derzeit ZFS-Dateisysteme.
Matt

FreeBSD 8 hat ZFS unterstützt, obwohl ich selbst immer noch ein bisschen vorsichtig bin - ich denke, es braucht bis 8.1 / 8.2, um wirklich solide zu sein
voretaq7

0

Wenn Sie keine gestufte DIY-Speicheroption wünschen (wenn ich die Dateisystemverwaltungsaufgabe in Windows 2008 R2 verwenden müsste), würde ich Ihnen wärmstens empfehlen, sich eine Lösung von Compellent anzusehen. Sie würden keine zusätzlichen Knoten (per se) für eine kostengünstigere Speicherung benötigen, da Sie einfach einige schnelle Festplatten und einige kostengünstige langsame Festplatten über das Betriebssystem Ihrer Wahl von der San installieren würden. Das OOB-Feature- Set von Compellent ist zugriffsbasiertes HSM. Diese Lösung bietet auch Skalierbarkeit. Derzeit ist dieser Ansatz möglicherweise teuer (und Sie haben keine Zukunftsaussichten angegeben), aber langfristig ist er möglicherweise kostengünstiger als der Versuch, eine Rolle für Ihre eigene Lösung zu verwalten und zu warten.


0

Nicht klar, auf welchem ​​Betriebssystem Sie arbeiten? Oder wenn Sie vorhaben, diese Dateien automatisch zu verschieben oder ein Skript zu schreiben, um sie für Sie zu verwalten? Wenn Sie "Zugriff" sagen, meinen Sie dies über das Web (HTTP) oder eine andere Methode?

Ich habe an einer Social-Networking-Site gearbeitet, die ein "Schließfach" für Dateien hatte. Als die Site wuchs, verbrannten wir ungefähr 200 GB pro Tag im Speicher.

Wir haben die ausgelasteten Dateien mithilfe von Webstatistiken verfolgt, die jede Nacht ausgeführt wurden. Wenn eine Datei in der Liste der Top-Dateien aufgeführt ist, aktualisiert das Skript die Datenbank und setzt die Datei auf "hohe Priorität". Dadurch wurde die Web-App angewiesen, die URL mit hoher Priorität zu verwenden und zu kopieren, um sicherzustellen, dass sich die Datei auf dem Schnellspeichersystem befindet.

Dies funktionierte ziemlich gut, bis sie sich eine skalierbare SAN-Lösung leisten konnten.


Wenn Sie große Dateien haben, führen Sie einige Tests mit verschiedenen Blockgrößen durch. Die Formatierung kann einen sehr großen Einfluss auf die Festplatten-E / A haben.
Jeffatrackaid

0

Ich habe noch nicht genug Details gehört, aber wenn ich weiß, was ich weiß, würde ich mir einen einfachen 1U-Server (oder zwei für HA) mit viel RAM ansehen, auf dem ein Betriebssystem / eine Speichersoftware Ihrer Wahl ausgeführt wird, das mit einem Xiotech Emprise 5000 verbunden ist. Angenommen, Sie können einen guten Arbeitssatz in den Speicher einbauen, dann sind die IOPS, die es bis zu den Spindeln schaffen, ziemlich breite zufällige E / A, und genau das kann die Box am besten. Sie könnten wahrscheinlich eine Kombination aus einem Server (64 GB) und einem Array (2,4 TB) für eine Berührung unter 20 KB ausführen.


0

Genau das tun wir mit unseren VoD-Servern, bei denen wir viele nicht gruppierte Server mit viel Speicher verwenden, um als Cache für die lokalen Festplatten zu fungieren, bei denen es sich wiederum um mehrere SAS-verbundene 25 x 2,5 "15krpm-Festplatten handelt. Diese werden dann über beide gestreamt 1-Gbit-NICs oder zwei 10-Gbit-NICs. Wir haben lange Zeit damit verbracht, die PCIe-Steckplatz- / SAS-HBA-Positionen sowie die Einstellungen für RAID-Cluster- und Festplattenblockgröße usw. zu korrigieren.


Hat die Festplattenblockgröße einen großen Einfluss auf die E / A? Ich habe derzeit ein 4 x 146 GB 15k SAS-Laufwerk in raid5, maximal ein Gbit (realistisch wäre es 2 Gbit, wenn es nicht abgedeckt ist), und ich bekomme 10-30 io. 4K-Blöcke

Ja, es kann einen enormen Unterschied machen, aber die Optimierung ist ein großes Thema, das eine angemessene Menge an Datenerfassung, -analyse und -tests erfordert, um einen bestimmten „Sweet-Spot“ für eine Anwendung zu erreichen. Wenn Sie eine Referenz- oder Testumgebung haben, ist dies der richtige Ort Tu es.
Chopper3

0

Interessantes Problem. Sieht so aus, als würden Sie eine Reihe von Raubkopien hosten: P.

Spaß beiseite, ich denke, Ihre Lösung könnte als guter Ausgangspunkt dienen. Es ist die Art von Problem, mit der Sie vertraut sein möchten, bevor Sie eine Lösung entwickeln, die entweder zu teuer oder zu begrenzt ist.

Ich würde so etwas tun:

  • (entweder einen Perfektionstest annehmen oder durchführen) Der Engpass besteht höchstwahrscheinlich darin, dass Benutzer gleichzeitig auf verschiedene Teile derselben Datei zugreifen - da Benutzer unterschiedliche Download-Geschwindigkeiten haben und sich zu unterschiedlichen Zeiten anmelden.
  • Für einen optimalen Durchsatz sollten Sie daher die am häufigsten angeforderten Dateien in den Arbeitsspeicher oder eine parallele Art von Speicher laden (dh auf viele, viele Festplatten replizieren und den Benutzerzugriff a-la-Round-Robin verteilen).
  • Daher möchten Sie möglicherweise mehrere Front-Line-Server mit jeweils einer Tonne RAM und einen Back-Line-Server mit einer Unmenge Speicherplatz haben.
  • Platzieren Sie auch einen Reverse-Proxy oder ähnliches, um Weiterleitungsbenutzer auf den richtigen Server zu verteilen (dh Server A enthält Film Nr. 1 bis Nr. 20, Server B enthält Nr. 21 bis 40 usw.).
  • Legen Sie schließlich einen Verwaltungsknoten fest, um Filme je nach Downloadhäufigkeit, Jahreszeit, Geburtstag der Berühmtheit und so weiter aus dem Backend-Speicher in das Frontend zu verschieben

(Wenn es funktioniert, kann ich die Server haben, wenn Sie damit fertig sind? Ich habe ein paar spikierende Experimente mit neuronalen Netzen, die ich gerne ausführen würde.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.