Scalare grandi download di file?

Al momento consegniamo grandi file (1 GB +) tramite un singolo server Apache, ma il nostro server Apache è estremamente discontinuo e dobbiamo scalare.

La mia prima idea era semplicemente duplicare questo server Apache, tuttavia la nostra libreria di file è troppo grande per scalare orizzontalmente il server Apache N volte.

Quindi la mia prossima idea era di avere due Apache (altamente disponibili) nel backend, ciascuno con una copia separata della nostra intera biblioteca .. poi "N" inversa i proxy davanti, where "N" cresce come le nostre esigenze di consegna crescono. Ogni proxy inverso è molto RAM pesante e ha il maggior numero di mandrini per GB ansible. I server Apache backend sono più "archivistici" e bassi mandrino-a-GB.

È una buona architettura? C'è un modo migliore per gestirlo?

  • fa la configuration di vernice includere i caratteri jolly di sostegno dell'istruzione?
  • Registrazione dietro un proxy inverso?
  • Crizione vernice CLI Purge Single File?
  • Usando nginx e / o vernice per eseguire la cache dei reindirizzamenti 301 generati dal server
  • Burattino: come saltare il riavvio durante l'aggiornamento del pacchetto fino alla sostituzione della configuration?
  • Utilizzo di un server 3 per la memorizzazione nella cache del database e del contenuto statico
  • Devo triggersre KeepAlive sul backend di Apache con la vernice come frontend?
  • Impostare il default TTL in Vernice 4.0?
  • 7 Solutions collect form web for “Scalare grandi download di file?”

    Questa non è una ctriggers architettura (il calamaro è un proxy di inversione popolare), tuttavia se si prevede una crescita esponenziale, una Content Delivery Network potrebbe essere una soluzione migliore – si paga solo per i contenuti necessari, la width di banda è immediata (non è necessario scalare più server) e il trasferimento in streaming viene geolocalizzato nei server il più vicino ansible al client, garantendo così la massima velocità di trasferimento. Tuttavia non ho mai provato questo con file di 1 GB e il costo potrebbe essere proibitivo.

    Tecnologia Torrent può essere considerata come un CDN p2p in questo caso, e in quanto tali alcuni di questi fornitori possono essere adatti come semi di torrent per il tuo contenuto, riducendo i costi totali di width di banda e (probabilmente) aumentando la velocità, anche se dipende dai tuoi guasti.

    Se non lo stai facendo, potrebbe essere utile indagare sulla distribuzione dei file in modo opzionale su bittorrent per spingere un po 'di carico dal server e sulla networking P2P.

    La mia domanda è come fai a sapere che tu hai l'obbligo di cominciare? Mi sembra solo strano che i tuoi dischi non possano tenere il passo con i download su HTTP (supponendo che questo sia il caso qui e non HTTPS).

    Se si dispone di una grande base di utenti, una soluzione CDN sembra applicabile, come hanno sottolineato altri. Usiamo Akami per la distribuzione del carico. Assumption qui è che stai servendo questi file sopra il PI (Internet pubblico) contro una sola soluzione ospitata internamente solo su una networking commutata 100Mb o 1000Mb.

    È ansible che tu percepisca i download lenti come un disco IO quando potrebbe essere un problema di width di banda Internet? (ancora una volta, supponendo che questo sia un sito affacciato sul PI).

    Ci sono molti modi per aumentare il disco IO: è ansible utilizzare SAN o RAID; entrambi forniscono un certo livello di memorizzazione nella cache. Non riesco a pensare a nessuna connessione a Internet che superasse la capacità di una singola SAN HBA o Dual SAN HBA (congiunta) che funziona a 2Gb / s / hba oa memory locale tramite RAID con supporto di cache collegato tramite un bus PCI-E.

    Stiamo parlando dei clienti connessi Gig-E allo stesso server connesso?

    Quello che stai cercando di scalare è il tuo IO.

    L'utilizzo di un proxy di caching come il calamaro o la vernice è un modo per popolare la cache per aumentare i mandrini senza replicare i file bassi / non utilizzati nell'archivio. I dispositivi CDN lo fanno anche per te. Sono questi file multimediali? I dispositivi CDN possono eseguire lo streaming anche per te.

    Gli utenti ricevono i guasti del download dei file e ripetono spesso il tentativo di download? Un alto tasso di rilancio aumenta notevolmente le tue esigenze di IO.

    Hai un controllo su come vengono ricavati i file? un gestore di download può recuperare each file in pezzi separati, dividendo la richiesta su più apache nel tempo (anche se potrebbero anche scaricare in parallelo, saturando il vostro pipe internet).

    Come riferimento di "esperienza", sono sempre stato in ambienti che collocano tutti questi dati su un NAS (netapp in particolare) e utilizzano apache con NFS per consegnare i file (anche se ci sono stati molti file più piccoli, non quelli da 1GB). Abbiamo anche utilizzato un CDN come proxy caching per la trasmissione di video.

    Una ansible architettura che ho visto utilizza nginx come frontend ed è supportta da istanze multiple Varnish. Si è anche tenuto conto dell'aggiunta di una vernice primaria di secondo livello a quella arco (vale a dire la vernice da vernice principale).

    A parte questo, si dovrebbe considerare l'uso di un CDN come altri hanno menzionato. A seconda di ciò che stai usando (media?), Ci sono alcuni CDN specializzati che si concentrano maggiormente sulla fornitura di file di grandi size come BitGravity.

    Quali sisthemes di storage hai i tuoi dati? E può essere partizionato?

    Avere server di back-end su SANs fisicamente diverse, ognuno con un sottoinsieme dei dati, che serve per invertire le macchine frontali di proxy sputerebbe i tuoi dati fisicamente e ancora lasciare che venga indirizzato allo stesso modo logicamente dall'esterno.

    Nginx è molto buono con il consumo di memory e il file statico in quanto può offload al kernel usando sendfile () . Lighttpd dovrebbe anche essere esaminato ma ho sentito che è less stabile (consumo di memory) ma non l'ho usato.

    I server front-end possono dividere le richieste sui server back-end per routes o templates (Nginx ha un grande supporto di regex) e può anche redirect a diversi centri dati se si ha la necessità. Potrebbe anche essere utile il DNS round robin.

    Ho usato Nginx per invertire il proxy come un failsafe tra sincronizzazione lentamente dei set di dati. Testerebbe per il file e se non esistesse chiederebbe il server di back-end sopra http. Più tardi sarebbe sincronizzato con le macchine frontali e functionrebbe normalmente.

    Assicurarsi che ciò che si fa a controllare le statistiche in tutta la scheda. La memory, io attende, la width di banda, la latenza, i tempi di richiesta media, ecc. Senza monitorare ciò che fai è scattare al buio.

    Quello che facciamo è utilizzare MogileFS per ridondare i file (ridondanza e scalabilità di ciascun file su più server), ma gli accessi utente passano attraverso un CDN per velocità e … beh, più scalabilità.

    Usiamo un CDN più piccolo, PantherExpress – il loro prezzo è buono e il set di funzionalità è semplicemente fantastico. Limelight Networks ed EdgeCast ci hanno anche dato buone citazioni di prezzo quando stavamo facendo shopping in giro.

    Mi è piaciuto che PantherExpress fornisca una buona documentazione tecnica sulle loro funzionalità e ottieni tutte le caratteristiche che hanno per un prezzo piuttosto che un po 'di soldi extra per questo e un po' di soldi extra per questo.

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