Come memorizzare i terabyte di file di grandi size, accessibili a caso?

Diciamo che ho un paio di mille file di grandi size (1-800mb ciascuno), tutti accessibili a caso, con i file appena caricati acceduti molto spesso e con il passare del tempo, i tempi di accesso scendono in una forma inversa quadrata, ma potrebbero essere picchi casuali nell'utilizzo dei file più vecchi.

Il throughput totale è nell'intervallo 2-4Gbit.

Sono alla ricerca di una soluzione self-hosted, non delle offerte Amazon, in quanto sono troppo costose.

Quello che avevo approssimativamente in mente è questo:

Costoso server "principale" con più unità SAS a 15.000 giri / min (o SSD) che ospiteranno nuovi file appena caricati sul sito. Una volta che il tasso di download scende (o il file raggiunge una certa età) il suo passaggio a uno dei nodes di archiviazione più economici.

EDIT: i file devono essere inviati tramite HTTP a una vasta gamma di utenti. I server sono in esecuzione FC5. Hai bisogno di accesso in gran parte, ma la scrittura è importnte.

In questo momento ho ottenuto un semplice setup di due server che massimizza un gbit, e mi sono impazzito. La casella è formatta con blocchi di 4K. Sarebbe aumentare a dire …. 1024K hanno un impatto enorme?

8 Solutions collect form web for “Come memorizzare i terabyte di file di grandi size, accessibili a caso?”

Se serve solo questi dati localmente, è ansible assemblare facilmente un singolo server con un paio di terabyte di spazio di archiviazione utilizzando i componenti off-the-shelf. Teaming up di un paio di gigabit NICs potrebbe fornire il troughput di networking.

Se il contenuto deve essere utilizzato su distanze maggiori, potrebbe essere meglio replicare i dati in diverse caselle. Se lo puoi permettere, puoi replicare completamente i dati e se i file non vengono mai sovrascritti, potrebbero funzionare script raw di replica basati su timestamp.

Altrimenti potreste esaminare le implementazioni di filesystem parallele; se vuoi un libero, puoi guardare a Luster (per linux) o Hadoop (multiplatform).

Tutti questi sono significativi:

1) un sacco di RAM

2) tabs di networking multiple e / o frontend per ridurre i colli di bottiglia

3) server proxy inverso, come Squid (vedere ad esempio http://www.visolve.com/squid/whitepapers/reverseproxy.php ) o Vernice

4) Impostazione RAID per i dischi (a strisce oa strisce / specchi combo possibilmente)

5) scelta del file system corretto e, sì, dimensione del block. XFS è stato un buon performsr per grandi quantità di dati, probabilmente ora ZFS è meglio.

Questi tutti dovrebbero aiutare. Quanto e cosa di questo deve essere implementato dovresti essere in grado di calcolare in base ai requisiti di destinazione (cioè la width di banda totale totale che si desidera utilizzare, il completamento di una singola carta, la massima produttività dei tuoi dischi non allineati e bombardati ecc.)

Quello che stai proponendo è una soluzione di storage automatizzata a più livelli. Questo non è un risultato banale. Alcuni fornitori di storage di fascia alta come EMC sono soluzioni di automazione tiering, ma sono orientate verso soluzioni LAN top-end aziendali e sono dotate di un tag di prezzi corrispondente.

Vorresti dare un'occhiata al sistema di archiviazione ZFS di Sun, in quanto tira il tipo di funzionalità che stai cercando e può essere anche più vicino al prezzo.

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

Se non si desidera un'opzione di archiviazione a livello di fai da te (se wheressi probabilmente utilizzare l' attività di gestione del file system in Windows 2008 r2), ti consiglierei di dare un'occhiata a una soluzione da parte di Compellent. Non avresti bisogno di ulteriori nodes (di per sé) per la memorizzazione dei costi più bassi, come avresti avuto semplicemente alcuni dischi veloci e alcuni dischi lenti poco costosi montati dal san tramite il sistema operativo di tua scelta. I caratteri OOB di Compellent sono HSM basati su accesso. La soluzione Thsi offre anche la scalabilità. Adesso questo approccio potrebbe essere costoso (e non hai fornito prospettive future), ma a lungo termine potrebbe essere più conveniente di cercare di gestire e mantenere un rotolo la tua soluzione.

Non è chiaro quale OS in cui operi? Oppure, se avete intenzione di spostare automaticamente questi file o scrivere uno script per gestirlo per te? Quando dici acceduto vuoi dire via il web (HTTP) o un altro metodo?

Ho lavorato su un sito di social network che aveva un "lock box" per i file. Mentre il sito è cresciuto, stiamo bruciando circa 200GB al giorno in magazzino.

Abbiamo tenuto traccia di file occupati usando web stats che hanno funzionato each notte. Se un file è stato elencato nell'elenco dei file superiori, lo script aggiornerebbe il database e impostava il file "ad alta priorità". Questo disse all'applicazione web di utilizzare l'URL di priorità alta e copia assicurarsi che il file fosse sul sistema di archiviazione veloce.

Questo funzionava ragionevolmente bene finché non potevano permettersi una soluzione scalabile SAN.

Non avevamo mai sentito abbastanza dettagli, ma sapendo quello che so, avrei cercato un server 1U (o due per HA) di base con un sacco di RAM che esegue la scelta del software OS / storage, collegato a un Xiotech Emprise 5000. Supponendo che sia ansible montare un buon set di lavoro nella memory, IOPS che lo trasmetterà ai mandrini sarà abbastanza random e questo è ciò che la scatola è la cosa migliore. Potresti probabilmente fare un combo con un solo server (64GB) / one-arrays (2.4TB) per un touch sotto i 20K.

Facciamo questa cosa esatta con i nostri server VoD, where utilizziamo molti server inclusi con un sacco di memory per agire come cache per i dischi locali che sono a sua volta dischi multipli collegati a SAS da 25 x 2,5 "15krpm, che vengono quindi trasmessi in streaming su più 1Gb NICs o doppie 10Gb. Abbiamo trascorso un tempo LUNGO per get le posizioni PCIe slot / posizioni SAS-HBA corretta così come cluster RAID e dimensione block disco ecc.

Problema interessante. Sembra che stai ospitando un sacco di film pirata: P

Scherzo da parte, penso che la tua soluzione potrebbe funzionare come un buon punto di partenza. È il tipo di problema che si desidera conoscere prima di cucinare una soluzione troppo costosa o troppo limitata.

Faccio qualcosa di simile:

  • (o assumere o fare un test di perf) il collo di bottiglia è probabilmente l'utente che accede a una parte diversa dello stesso file allo stesso tempo – poiché le persone avranno velocità di download diverse e si accederanno in tempi diversi;
  • quindi, per get il miglior rendimento dovreste caricare i file più richiesti in RAM o in una sorta di memory parallela (ovvero replicarli su molti, molti dischi e distribuire l'accesso degli utenti a-la round robin);
  • ergo, si potrebbe desiderare di avere diversi server di prima linea con una tonnellata di RAM ciascuno e un server back-line con uno spazio sul disco gazillion.
  • posiziona anche un proxy di inversione o qualcosa del genere per distribuire gli utenti di reindirizzamento verso il server corretto (vale a dire il server A detiene il film # 1- # 20, il server B detiene # 21-40 e così via)
  • infine, metta un nodo di gestione per spostare i filmati dall'archivio di backend alla frontend secondo la frequenza di download, l'anno dell'anno, il compleanno di celebrità e cosa

(se funziona, posso avere i server quando hai finito con loro? Ho un paio di sperimentazioni di reti neurali rigorose che vorrei correre)

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.