Ridurre la richiesta di richiamo di Apache

In New Relic, una delle metriche che visualizzano come parte del tempo di risposta dell'applicazione è "Coda di Richiesta" .:

Per raccogliere il tempo di accodamento della richiesta, è necessario contrassegnare la richiesta HTTP con un timestamp quando inizia la coda. [1]

  • Apache Header Module caricato ma non può impostare le intestazioni in htaccess
  • Imansible modificare apache2.2 httpd.conf in Windows 7
  • Apache, SVN e Active Directory: come evitare la configuration duplicata?
  • Come distriggersre la vernice
  • Perché è così importnte rimuovere 777 permessi?
  • Apache dice che DocumentRoot non esiste quando lo fa
  • Questo viene fatto aggiungendo un'intestazione HTTP nell'Appache httpd.conf:

    RequestHeader set X-Request-Start "%t" 

    New Relic menziona che:

    Per la richiesta di benna di accodamento, un operatore del sito può fornire più istanze di applicazione.

    Tuttavia abbiamo visto aggiungere nuove istanze di applicazione (cioè i nodes web) non influenza il tempo di accodamento della richiesta – rimane costante. Stiamo vedendo questo misurato a circa 250ms.

    Quali fattori influenzano la lunghezza della coda di richiesta e come può essere ridotta?

    [1] http://support.newrelic.com/help/kb/features/tracking-front-end-time

  • Perché iptables non blocca un indirizzo IP? (Versione LB / proxy)
  • È ansible salvare il running-config su Nexus Switches
  • Stato di process daemon Mod_wsgi
  • IP è in conflitto con una printingnte in networking
  • Avere molti sottodomini con SSL - migliori pratiche?
  • SMBv2 e Windows 7
  • 2 Solutions collect form web for “Ridurre la richiesta di richiamo di Apache”

    Penso che il modo migliore per farlo è aumentare i parametri 'Server Limit' e 'Max Clients' nell'Appache Config

    Ciò impone quanti thread che Apache possa elaborare contemporaneamente. Se si dispone di un valore "Max Clients" di 100, Apache può elaborare fino a 100 richieste contemporaneamente.

    Probabilmente è anche opportuno notare che Apache è utile per piccoli file (text, forse CSS / JS ecc.) Ma non così grande nei file più grandi come immagini, video, flash ecc. Perché ognuno di questi richiede una nuova richiesta stai usando Keep-alive ma questo non migliora troppo). Quindi, se hai una pagina con 49 risorse esterne (quindi 50 richieste in totale) che richiede 1 secondo per caricare e che i tuoi client max sono impostati a 100, puoi elaborare solo due visualizzazioni di pagina un secondo prima che le richieste inizino a essere in coda.

    Puoi get questo aspetto in molti modi, cercare di scaricare i tuoi contenuti su un CDN (i prezzi iniziano da circa $ 0.10 / GB ma se il tuo trasferimento di dati è alto potrebbe essere utile entrare in contatto con Edgecast o Akami poichè i loro prezzi sono molto più economici bulk). Ciò significa che il tuo server non deve preoccuparsi di nessuna delle risorse statiche necessarie per caricare una pagina, quindi nell'esempio precedente è ora fino a 100 visualizzazioni di pagina al secondo prima che le richieste inizino a fare una coda.

    Se non si desidera esplodere su un CDN, suggerirei di get due IP sul tuo server e collegarli ad Apache e uno a NGINX. NGINX è un server ad altissima performance in grado di gestire migliaia di volte più connessioni rispetto a Apache, NGINX non utilizza la coda di richiesta come Apache perché non blocca. Purtroppo NGINX non dispone di tutte le funzionalità di Apache, per esempio non è ansible eseguire PHP direttamente tramite NGINX senza proxy a Apache / FCGI / HipHop ecc.

    In aggiunta a questo, nella tua domanda che si dice "nodes web", avrei ragione nel pensare di utilizzare Apache come un bilanciatore di carico frontale / proxy server a questi nodes? Se così fosse, ti suggerisco di provare qualcosa come NGINX, Varnish, HAProxy ecc., Poiché sono molto più adatti a fare cose come quella e alla gestione di connessioni simultanee.


    EDIT:
    Ho pensato che questo potrebbe interessarti per quanto riguarda i server frontali LB.
    Utilizziamo Apache come frontend proxying a 16 nodes applicativi suddivisi in due server. Il server proxy era in esecuzione su un server Intel Core i5 quad core (in modo da non sottovalutare). Abbiamo iniziato a notare una relazione parabolica tra il numero di richieste / secondo e il tempo di risposta. A circa 2000 richieste al secondo la carica della CPU avrebbe sparato e each risposta avrebbe portto circa 800 ms per completare, per 3000 r / s each risposta avrebbe impiegato circa 2 secondi. Abbiamo passato a NGINX e abbiamo colpito 5000 r / s mentre solo aggiungendo circa 50ms alla latenza e il carico della CPU era un quarto di quello che era con Apache.
    Ovviamente dipende completamente la tua situazione, quello che stai facendo e quali risorse avete a disposizione, ma ho solo pensato che ti darei la mia presa =)

    Devo sollecitare la domanda ovvia: la documentazione afferma che dovresti utilizzare l'intestazione http X-Queue-Start (o X-Queue-Time), ma hai citato che stai utilizzando X-Request-Start. Stai aggiungendo l'intestazione corretta?

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