Cosa devo fare per ridimensionare un sito Web ad alto traffico?

14

Quali migliori pratiche dovrebbero essere intraprese per un sito web che deve "scalare" per gestire la capacità? Questo è particolarmente rilevante ora che le persone stanno prendendo in considerazione il cloud, ma potrebbero perdere i fondamenti.

Sono interessato a conoscere qualsiasi cosa tu consideri una best practice dalle attività a livello di sviluppo, all'infrastruttura, alla gestione.

    
posta random65537 08.09.2010 - 04:49
fonte

6 risposte

16

Progettazione per concorrenza

Cioè, mentre stai programmando, pianifica di far partire più thread. Pianifica lo stato condiviso (spesso solo il db). Pianificare più processi. Pianifica la distribuzione fisica.

Ciò consente di distribuire il sistema su più macchine e su più processi con bilanciamento del carico. Ti permette di avere processi ridondanti in esecuzione in caso di errore, e nel caso in cui hai bisogno di modificare il sistema sul posto, non devi uccidere tutti i servizi per farlo.

    
risposta data 08.09.2010 - 07:37
fonte
13

Alcune cose che potresti prendere in considerazione:

  • Separazione dei lati di lettura e scrittura della memoria dati.
    • CQRS / Sourcing eventi
    • CQS
    • Message-anabbagliante / Attori
  • Evitare il processo condiviso e lo stato del thread
    • Quindi evitando il blocco
    • Puoi evitarlo attraverso il sistema di tipi creando classi, strutture e altri tipi di dati per essere immutabili, vale a dire non modificabili dopo la costruzione. Soprattutto per i tipi di dati astratti complessi, funziona sorprendentemente bene (ad esempio l'implementazione di jQuery)
  • Non blocca i thread del server Web su IO. Se si utilizza ASP.Net, utilizzare pagine / azioni asincrone con il modello APM / libreria parallela attività (TPL)
  • Non si salva un carico di stato nel dizionario della sessione utente
    • Questo deve essere spostato tra i thread quando si verificano migrazioni di thread in IIS.
    • Avere un routing intelligente, in modo tale che le risorse non protette / statiche non siano servite con lo stesso framework applicativo (ad es. ASP.Net) che aggiunge sovraccarico. Guarda ad avere diversi server web, per esempio.
  • Scrittura del codice di passaggio continuo con un modello di flusso di lavoro asincrono (ad esempio bind (haskell) /callcc/Tasks.ContinueWith/F#'s async)
  • Utilizza la teoria delle code per calcolare dove possono verificarsi i colli di bottiglia
  • Utilizzare gli aggiornamenti push anziché quelli basati su pull per leggere i modelli e lo stato di altre applicazioni. Per esempio. tramite RabbitMQ / nServiceBus
  • Utilizza il "gestore HTTP" meno pertinente applicabile
  • Per i file statici, serve e-tag e criteri di scadenza della cache per consentire all'infrastruttura Web di funzionare come dovrebbe (ad esempio con il proxy Squid)
  • (assumimi per risolvere i tuoi problemi di ridimensionamento e ottenere tutorial sul posto;))
risposta data 10.02.2011 - 23:06
fonte
4

Condividi Niente architettura.

Con questo in mente, e contrariamente a quello che potresti pensare, non saltare subito a una soluzione di scale-out. Il sovraccarico del sistema fuori rete rispetto a una chiamata all'interno del sistema non deve essere sottovalutato. Ad esempio, ci vuole molto più tempo per fare una connessione DB su qualsiasi interfaccia di rete di quanto non faccia una chiamata locale. Budget quanto tempo è necessario per la gestione, la potenza e lo sforzo di messa a punto nel ridimensionamento rispetto a $ extra per un vero grande sistema.

Indipendentemente da ciò, ho ancora un grande valore nelle architetture di "share nothing" e puoi stratificare e ridimensionare i tuoi sistemi quando sarà il momento.

    
risposta data 20.10.2010 - 06:32
fonte
0

Parallelizza le richieste su più nomi host

Una parte dello standard HTTP è una sezione che dice che i webclients richiedono un massimo di 2 sessioni per host DNS. Ecco una soluzione in cui tu e alias il tuo www.domain.com e ottieni una concorrenza di richieste più elevate, aumentando la velocità di caricamento della pagina:

link

Fondamentalmente implica la modifica del gestore HTTP ASP.NET per alternare gli host di destinazione a cui si inviano i client, in cui ogni host è un CNAME a "www".

    
risposta data 08.09.2010 - 05:02
fonte
0

DNS sicuro, veloce e affidabile

Ho trovato alcuni siti Web di alta capacità utilizzando il server DNS del registrar, che non aveva SLA per uptime o prestazioni. Inoltre, i loro server si trovavano in India e la latenza aumenta la possibilità che uno spoofer DNS possa avvelenare la cache del vostro ISP, o intermedia. Ciò farebbe sì che anche il tuo traffico protetto da SSL venga reindirizzato senza che nessuno lo sappia.

La velocità del DNS influisce anche sul tempo di caricamento iniziale del server, prima che i record vengano memorizzati nella cache.

Uso DynDNS o Neustar alla maggior parte dei miei clienti poiché hanno un'infrastruttura DNS piuttosto solida (anche se è costosa e non ho altre affiliazioni con quelle aziende).

    
risposta data 08.09.2010 - 04:57
fonte
0

Penso che la chiave sarà semplice:

Avere un codice semplice. Ciò significa qualcosa che guardi e capisci. Mentre espandi e cambi server, devi sapere cosa sta succedendo. Potrebbe anche essere necessario aggiungere codificatori che devono comprendere rapidamente. Ganci e file XML che chiamano codice casuale che non è ovvio è molto male.

Quindi puoi testare e trovare i problemi.

Guarda qui: link

Noi di stellarbuild cerchiamo di assicurarci che i nostri siti web siano scalabili senza tempi morti. Ciò significa che devi essere in grado di sapere che cosa fa il tuo codice e dove lo fa Anche se stai provando una macchina diversa, non puoi impiegare troppo tempo per ridimensionarla. La maggior parte delle persone inizia solo quando è quasi troppo tardi, purtroppo. Puoi ottimizzare solo dopo averlo fatto secondo me.

    
risposta data 18.11.2014 - 01:35
fonte

Leggi altre domande sui tag