Domanda

Ho un enviorment equilibrato carico con oltre 10 server web che esegue IIS. Tutti i siti web accedono un unico archiviazione di file che ospita tutte le immagini. Al momento abbiamo 200 GB di immagini - noi li conserviamo in directory di 1000 immagini per directory. In questo momento tutte le immagini sono in un dispositivo di memorizzazione singola (RAID 10) collegato ad un singolo server che funge da file server. Tutti i server web sono collegati al server di file sulla stessa LAN. Sto cercando di migliorare l'architettura in modo che non avremmo alcun singolo punto di errore. Sto considerando due alternative:

  1. Replicare l'archiviazione di file a tutti i server web in modo che tutti gli accessi ai dati in locale
  2. replicare la memorizzazione di file ad un altro di stoccaggio quindi se succede qualcosa al di archiviazione corrente saremmo stati in grado di passare ad esso.

Ovviamente le principali operazioni effettuate sulla memorizzazione di file vengono letti, ma ci sono anche un sacco di operazioni di scrittura. Cosa ne pensi è il metodo preferito? Qualsiasi altra idea?

Al momento sto escludo uso di CDN in quanto richiede un cambio di architettura sul programma che non possiamo fare in questo momento.

Nessuna soluzione corretta

Altri suggerimenti

Certe cose io normalmente prendere in considerazione prima di andare per il cambiamento arco è

  1. Quali sono i problemi di arco corrente
  2. Che cosa sto facendo di sbagliato con l'arco in corso. (Se questo aveva lavorato per un po ', piccoli aggiustamenti normalmente risolvere un sacco di problemi)
  3. si è mi permetterà di crescere facilmente (qui ci sarà sempre un limite superiore). Sulla base del passato, la crescita dei dati, si può efficacemente pianificare.
  4. affidabilità
  5. facile da mantenere / monitor / Risoluzione
  6. costo

200 GB non è un sacco di dati, e si può andare dentro per qualche soluzione casa coltivata o usare qualcosa come un NAS, che vi permetterà di espandere in seguito. E hanno una replica hot swap di esso.

La replica di stoccaggio di tutti i server web è una messa a punto molto costoso, e come hai detto ci sono un sacco di operazioni di scrittura, avrà una grande testa nella replica a tutti i server (che non farà che aumentare con il numero di server e in crescita i dati). E c'è anche il problema di dati non aggiornati essere serviti da uno degli altri nodi. A parte che la risoluzione dei problemi problemi di replica sarà un pasticcio con 10 e nodi in crescita. A meno che la ricerca / lettura / scrittura di file è molto tempo critico, replicando a tutti i server web non è una buona idea. Gli utenti (su web) saranno quasi non si nota la differenza di 100ms - 200ms in loadtime.

Ci sono alcuni impresa noreferrer soluzioni per questo genere di cose. Ma non dubito che sono costosi. NAS non scala bene. E si dispone di un singolo punto di errore che non è buono.

Ci sono alcuni modi in cui è possibile scrivere codice per aiutare con questo. Si potrebbe memorizzare nella cache le immagini sui server web per la prima volta sono state chieste, questo ridurrà il carico sul server di immagini.

Si potrebbe ottenere un master slave set up, in modo da avere un server di immagini principale, ma altri server che copiano da questo. Si potrebbe caricare bilanciare questi, e mettere un po 'di logica nel codice in modo che se uno schiavo non ha una copia di un'immagine, si controlla sul master. Si potrebbe anche assegnare questi in ordine di priorità in modo che se il padrone non è disponibile il primo schiavo diventa il padrone.

Dal momento che avete così pochi dati nel vostro storage, ha senso acquistare vari grande HDs o utilizzare lo spazio libero sul vostro server web per conservare le copie. Ci vorrà giù la pressione sul sistema di storage back-end e quando non riesce, è ancora possibile fornire contenuti per gli utenti. Ancora meglio, se avete bisogno di scala (più download), si può semplicemente aggiungere un nuovo server e lo stress sul back-end non cambierà, molto.

Se avessi dovuto fare questo, mi piacerebbe utilizzare rsync o all'unisono per copiare i file di immagine nella stessa esatta spazio sui server web ove risultino da il dispositivo di memorizzazione (in questo modo, è possibile scambiare la copia con un file system di rete di montaggio in qualsiasi momento).

Esegui rsync di tanto in tanto (per esempio dopo ogni caricamento o una volta nella notte, saprete meglio quali dimensioni si adatta meglio)

.

Una soluzione più versatile sarebbe quella di utilizzare un protocollo P2P come Bittorreent. In questo modo, si potrebbe pubblicare tutte le modifiche sul backend di archiviazione per i server web e avevano ottimizzare gli aggiornamenti automatcially.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top