Qual è la configuration hardware ottimale per applicazioni LAMP di carico pesante

Ho bisogno di eseguire l'applicazione Linux-Apache-PHP-MySQL (piattaforma di e-learning Moodle) per un gran numero di utenti concorrenti – sto cercando 5000 utenti. Contemporaneamente voglio dire che 5000 persone dovrebbero essere in grado di lavorare con l'applicazione contemporaneamente. "Lavoro" significa non solo che il database legge ma scrive pure.

L'applicazione non è molto tipica, poiché sta facendo un sacco di inserti / aggiornamenti nel database, quindi le tecniche di caching non aiutano molto. Stiamo usando il motore di stoccaggio di InnoDB. Inoltre l'applicazione non è scritta con le performance in mente. Ad esempio, un thread Apache occupa solitamente circa 30-50 MB di RAM.

  • Stato server Apache 403 in port non standard
  • Due file identici; Apache dice che uno è vietato
  • Come proteggere i file di grandi size scaricati tramite PHP e / o Apache?
  • Alternativa a più installa WordPress (e non utilizzando WordPress-mu)
  • Limitare le connessioni simultanee per IP con Apache2
  • Apache non si avvia: errore di syntax ... DocumentRoot deve essere una directory
  • Sarei grato per informazioni su quale hardware è necessario per creare configurazioni scalabili in grado di gestire questo tipo di carico.

    Ora stiamo utilizzando due HP DLG 380 con due processri a 4 core che sono in grado di gestire molto più basso carico (in genere 300-500 utenti concorrenti). È ragionevole investire in questo tipo di scatole e build il cluster usando loro o è meglio andare con alcuni più high-end hardware?

    Sono particolarmente curioso

    • quante e quanto potenti server sono necessari (numero di processri / core, dimensione della RAM)
    • quali apparecchiature di networking dovrebbero essere utilizzate (quali tipi di interruttori, tabs di networking)
    • qualsiasi altro hardware, come particolari soluzioni di archiviazione di dischi, ecc., che sono necessarie

    Un'altra cosa è come mettere insieme tutto ciò che è l'architettura più ottimale. Il clustering con MySQL è piuttosto duro (le persone si lamentano di MySQL Cluster, anche qui su Stackoverflow).

  • mod_wsgi daemon mode - WSGIDaemonProcess per configuration host virtuale?
  • Come posso determinare la causa di una perdita di memory apparente nell'applicazione Web basata su Apache / PHP?
  • Quanto spesso dovrebbe essere riavviato Apache e MySQL?
  • CentOS Apache HTTPD Configuration (403 Proibito)
  • lighttpd VS Apache
  • La list principale di SVN restituisce 403 quando si utilizza authz
  • 2 Solutions collect form web for “Qual è la configuration hardware ottimale per applicazioni LAMP di carico pesante”

    Dischi. LOTTI di dischi FAST dietro un controller RAID appropriato. Io uso personalmente una gabbia di unità di cremagliera SuperMicro 2 che è dotata di 24 dischi da 2,5 ", insieme ai dischi WM Velociraptor 10k RPM – abbastanza buono per me. Puoi facilmente impilare quelle caselle per affrontare più dischi – il controller Raid che uso (Adaptec 5805 ) può affrontare circa 190 dischi. Quando si parla di database di fascia alta, con i nserts e gli aggiornamenti, i dischi saranno il tuo problema.

    Ottieni X di quelli (x> 1) per la ridondanza e master / slave loro database saggi (nessun esperto di mySQL qui).

    networking: probabilmente 1 gbit internamente nel cluster. prima di andare a 10 gbit – guardate Infiniband (12 gbit). Con le tabs corrette che è più economico dell'utilizzo di ethernet da 10gbit e ha una latenza migliore.

    Quindi utilizzare più piccole / altre scatole per la parte anteriore. Sia supermicro che Tyan hanno gabbie di nodes multipli – è ansible get un sistema a due rack, che è di 4 singoli computer, ognuno con 2 processri. Cluster l'estremità anteriore;) I processri moderni che ringraziano il cielo possono affrontare una notevole quantità di RAM, per cui il process di 50 MB / Apache non è così male da quella parte. Si abitua alle macchine con 32 o 64 gigabyte di ram;)

    Alterantemente, si potrebbe voler guardare lame nito per la parte anteriore, ma non ho mai potuto avere un senso finanziario fuori di loro (WAY troppo costoso, PLUS la gabbia – ciao?).

    Dimentica il clustering – non funziona bene quando tutti devono scrivere in un database.

    Forse puoi dividere i tuoi dati utilizzando diversi database. Ad esempio, gli utenti che substring(md5sum(username) for 1)="0" connettono al database databasename_0 sul server databaseserver_0 , la substring(md5sum(username) for 1)="2" connette al database databasename_2 sul server databaseserver_2 .

    È ansible scalare in questo modo da 1 server fino a 16. Ad esempio per 2 server – i nomi DNS che databaseserver_0 a databaseserver_7 puntano a server1 e databaseserver_8 server1 a databaseserver_f puntano a server2 . Se un server è più potente dell'altro, è ansible far eseguire più database.

    In questo modo è ansible scalare facilmente e a buon mercato.

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