come funziona un'applicazione web con migliaia di richieste?

Sono andato in alcuni siti web e notai che tutti utilizzano la tecnologia AJAX per molte attività come chat, messaggi e così via. Ovviamente utilizzano molti httprequest. La mia domanda è se costrui un semplice sito web usando AJAX e ti aspetti solo poche persone all'ora e poi cominci ad avere più di 1.000 membri registrati all'ora – una singola applicazione web può gestire più richieste all'ora se solo aggiorni a server più veloci o devi riscrivere il codice? Esattamente come si fa a "scalare" l'applicazione web?

  • Quali sono le migliori strategie per aumentare la mia applicazione web per far fronte a un grande volume di utenti?
  • È normale get la width di banda come il primo bottleneck di scalabilità con una connessione a 100 Mbps?
  • È RSS (ricevere ridimensionamento laterale) in Windows considerato instabile?
  • One Solution collect form web for “come funziona un'applicazione web con migliaia di richieste?”

    Questa è una domanda molto coinvolgente che molte persone intelligenti spendono molto tempo a pensare.

    Detto questo, ci sono alcuni provati e veri meccanismi che puoi presentare che aiuteranno con la scalabilità. In definitiva, però, si riduce all'applicazione e come deve essere scalata in modo specifico. Ad esempio, è ansible scalare Oracle in modo diverso da quello di scalare Apache.

    Innanzitutto, non preoccuparti troppo di ciò che potrebbe accadere. Troppi sviluppatori si preoccupano per il "forse" anziché preoccuparsi del "ora". La grande maggioranza delle domande e dei siti web non richiede nulla di speciale.

    Tale disclaimer da parte, ci sono generalmente alcuni principi che dovrebbero essere seguiti durante la progettazione e la codifica di un'applicazione altamente scalabile. Il concetto di "niente di comune" viene in mente. Separazione degli interessi. I buoni sviluppatori lo riconoscono e possono costruirsi dal primo giorno.

    Un elenco delle tecniche comunemente implementate:

    1. Caching. Implementare sia un livello front-end che le immagini e le query di dati vadano a colpire il backend. Anche di nuovo a un livello di oggetti attraverso qualcosa come memcached. L'objective è ridurre al minimo il carico di lavoro e rispondere al cliente quanto più avanti ansible.

    2. Sharding del deposito dei dati. Ciò consente che lo strato di dati sia scalabile orizzontalmente in modo tale da poter aggiungere sisthemes e server di database aggiuntivi mentre raggiungiamo la capacità. In genere c'è un 'chiave shard' o un tipo che indica quale server di database è disponibile su un determinato pezzo di dati. Questo non si ferma al livello RDBMS. L'archiviazione dei file e quali non dovrebbero essere considerati.

    3. Bilancio del carico. Consente di aggiungere altri client front-end (server Web) per gestire il carico di richiesta. Questo è where si avvicina l'integer approccio "Non condiviso". Questi web server dovrebbero essere apolide in modo tale che il fallimento non import. È quindi ansible scalare orizzontalmente aggiungendo più macchine. Poiché i nostri dati sono distribuiti su un livello di backend, essi semplicemente crollano e gestiscono le richieste. Gli algoritmi di bilanciamento vengono utilizzati per select un server che non è occupato. Diffondere il carico, per così dire.

    4. CDN. Questo tipo di build su # 1, ma si basa su provider CDN. Stiamo ancora costruendo il concetto di rispondere alla richiesta quanto più avanti ansible. C'è anche un integer "Edge Side Includes" lingua per gestire questa roba.

    5. Replica dei dati. Ad esempio, un singolo nodo di scrittura che replica a una coppia di nodes di lettura. Poiché la maggior parte delle applicazioni web sono letti, possiamo dirigere le nostre letture ai nodes di lettura mentre pompare scrive attraverso i nodes di scrittura. MySQL, Postgres, Oracle, MSSQL supportno tutto questo come le opzioni di NoSQL eventualmente compatibili come MongoDB. Questo non è necessariamente reciprocamente esclusivo di # 2.

    Sono sicuro che sto dimenticando qualcosa come sto tirando tutto questo fuori dalla memory, ma si ottiene l'idea. Al centro, l'applicazione deve essere progettata per essere scalabile. Se lo si dispone, è ansible diffondere il carico e crescere indefinitamente implementando un'architettura intelligente.

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