2010-05-31 18 views
23

Ho in programma di creare un'applicazione che otterrà una grande quantità di traffico. (Si prega di non dire che non otterrò traffico, questo è per una rete interna, quindi il traffico sarà lì. Cerchiamo solo di evitare il 'Non riuscirai a ottenere tanto traffico, non ti preoccupare per questo.)Cosa deve fare un sito web che deve essere scalato?

Per quanto riguarda il tipo di traffico che mi aspetto, gli utenti potranno sfogliare varie creazioni dinamiche (in base ai dettagli dell'account utente). Su quei siti l'utente può inviare input di testo. Sia il caricamento delle pagine che la gestione dell'input dell'utente colpiranno il database. I carichi saranno ovviamente letti, ma l'input di gestione richiederà entrambe le letture delle scritture &. Gli input possono anche influenzare le visualizzazioni degli altri utenti. Se ciò accade, dovrò notificare agli altri utenti di aggiornare la pagina.

Che tipo di cose devo fare in modo che non si blocchi semplicemente sotto il carico di una grande quantità di utenti?

ciò che diventa fattori limitanti? Roba di database? I/O con front end?

Non ho mai sviluppato un'app web seria e ho bisogno di aiuto.

EDIT: Stavo pensando di usare Erlang per il backend dato che l'ho usato un po 'e mi piace molto tutto il materiale della concorrenza. Sarebbe una scelta valida o dovrei provare qualcosa di più tradizionale?

+5

Vedere http://highscalability.com/ - articoli molto interessanti su esattamente il tuo argomento. Soprattutto i casi di vita reale e le spiegazioni (anche se concise) sono da leggere. –

+1

Si prega di approfondire il tipo di traffico che ci si aspetta di avere. Ci saranno grandi upload/download di file? Sarà interattivo? Sarà una delle app principali in quella rete? O semplicemente facendo clic e visualizzando le pagine statiche poche volte al giorno? – stagas

+0

Appartiene a ServerFault, methinks. –

risposta

17

Questo è un argomento molto vasto e probabilmente vorrai fare tutte le ricerche che il tempo consente. Ci sono molti grandi argomenti da considerare.

  1. Archiviazione stato sessione. Ovviamente, l'archiviazione di sessione occupa memoria o spazio su disco. È necessario disporre di una strategia per archiviare le informazioni di sessione in modo corretto e in un modo che possa essere utilizzato da una web farm.

  2. Caching. Una solida strategia di memorizzazione nella cache può ridurre drasticamente i carichi. Fai molte ricerche su quando, cosa e dove dovresti fare il caching.

  3. Scalabilità e test di carico. Un pensiero extra deve entrare in ogni operazione di recupero delle risorse per assicurarsi che venga eseguito il numero di volte necessario. Il test di carico e la profilazione del codice possono aiutare a identificare i colli di bottiglia qui se si utilizzano strumenti validi.

  4. ottimizzazione del database. Assicurati di capire come ottimizzare correttamente il tuo database per migliaia (milioni?) Di operazioni al minuto. Se l'applicazione è pesante in scrittura, potrebbe essere necessario esaminare i vecchi dati di magazzino che non devono più essere inclusi negli indici per velocizzare le operazioni di scrittura.

  5. percorso di aggiornamento. Il tuo traffico aumenterà nel tempo? Assicurati di capire in che modo inseriresti più server e memoria nella tua applicazione se/quando è necessario, e cosa sarebbe richiesto.

Ci sono molti libri in giro sui quali è possibile investire e che potrebbero ripagare in grandi dividendi. Esegui una ricerca per "creare applicazioni web scalabili" su Amazon o nei capitoli e probabilmente troverai molti testi da seguire, sia tecnologici che agnostici.

+0

Grazie! Ciò fornisce alcune cose da guardare. – samoz

+0

Se si utilizza ASP.Net o ASP.Net MVC come stack tecnologico, il sito MSDN contiene molti articoli che consentono di iniziare con tutti questi concetti per tali tecnologie. – womp

+0

Un buon suggerimento su # 2 è quello di utilizzare un proxy di caching, ove possibile, ad es. Vernice o calamaro Ciò può ridurre drasticamente il carico sui server delle app poiché non dovranno rigenerare le pagine per ciascun visitatore. – Martin

0

basta non fare più di quanto è necessario. se ti attieni a questo, puoi gestire la maggior parte delle cose a corto degli effetti metablog.

1

Oltre a tutto il resto qui menzionati, si dovrebbe essere guardando i tempi del tuo traffico.È relativamente costante nel tempo? Oppure arriva a raffica, dove avrai una quantità di traffico molto più alta in un breve periodo di tempo?

In generale, è necessario progettare un sistema in grado di gestire i carichi di picco con garbo (anche se non necessariamente al livello di prestazioni ideale). Se il tuo traffico è molto impetuoso, dovrai dedicare più sforzi per ridimensionarlo rispetto a quanto avresti se avessi gradualmente la stessa quantità di traffico.

1

Per quanto riguarda Erlang: suona come un linguaggio accettabilmente buono (basato sul poco che ne so), ma non è certamente una bacchetta magica che ti dà scalabilità. Ci sono dozzine di fattori e prodotti diversi da considerare. La scelta della lingua è solo una di quelle ... e probabilmente una delle meno significative.

Potrebbe essere meglio andare con quello che già sai & imparare come farlo scalare, piuttosto che andare a una nuova/sconosciuta tecnologia e sperare che si adatti a te.

+0

Bene, provengo principalmente da uno sfondo di sistema embedded o di sistema, quindi posso iniziare praticamente ovunque. Mi è piaciuto guardare ad Erlang perché è un linguaggio funzionale ma anche per gli alti aspetti di concorrenza che ha propagandato. – samoz

1

Archiviazione backend, gestione database, contenuto dinamico front-end e memorizzazione nella cache è una cosa. L'altra considerazione riguarda il provider di servizi host e la larghezza di banda di rete disponibile.

Verificare con il proprio servizio di hosting i limiti di larghezza di banda, la massima allocazione di memoria per richiesta, le dimensioni massime di caricamento dei file e le query massime del database. Se il tuo attuale host non offre servizi a basso costo che soddisfano i requisiti di ridimensionamento, passa a un altro host prima di essere spento o bloccato da una fattura mensile a tre cifre per superare la larghezza di banda assegnata.

Modifica: basta rileggere e catturare il riferimento "rete interna". Quindi, in questo caso, probabilmente non sarai bloccato da diverse centinaia di dollari dal tuo amministratore di rete, ma potrebbero comunque bloccarti. Assicurati di mantenere aperte le linee di comunicazione con i tuoi amministratori di rete e gli amministratori di tutti gli altri servizi con cui interagisce il tuo sito, o probabilmente ti farai diventare nemici di tutti molto velocemente. In altre parole: buona etichetta di rete.

Inoltre, se effettivamente proprietario e costruire il server, assicurarsi che il sistema operativo, stack software e l'hardware sono tutti aggiornati con solo software e firmware versioni stabili, in grado di gestire il carico, e monitorati per eseguire senza problemi a sempre.

Modifica n. 2: so che hai chiesto specificamente in che modo la tua applicazione può gestire il carico, e potrei semplicemente dare di matto fuori tema qui, ma devi anche considerare se tu ei tuoi compagni di squadra potete gestire il carico. La larghezza di banda della manodopera è altrettanto importante e scoraggiarsi dal carico di lavoro è come progetti come questo falliscono. La birra è la migliore amica di un programmatore, soprattutto quando affronta compiti di programmazione complessi e creativi, ma può portare a gravi problemi di consumo se la manodopera non viene gestita correttamente o se mancano risorse di manodopera. Chi risponderà alla notifica di interruzione alle 3 del mattino? Chi risponderà all'intemperie da parte di fondamentalisti o troll religiosi o strisciare attraverso leggi e brevetti per verificare se tale avviso di decollo è falso? A meno che non sia un concerto in grado di pagare le bollette, probabilmente la maggior parte della gente non può dedicare molto tempo ed energia. Non intendo scoraggiarti affatto, e spero che questo sia già stato coperto.

+0

Grazie per il consiglio. Se lo spostiamo su Internet (potrebbe accadere alla fine se questo pilota ha successo), mi ricorderò di esaminarlo. – samoz

Problemi correlati