2011-11-21 5 views
10

Sto cercando di ottimizzare la mia applicazione web utilizzando l'API della velocità della pagina di Google, che ha evidenziato l'assenza di "Keep-alive" nelle intestazioni delle risposte HTTP come una grave debolezza della pagina.È possibile abilitare Keep-alive con un bilanciamento del carico?

Parlando con i miei sviluppatori di back-end e amministratori di sistema, mi hanno detto che l'utilizzo di Keep-alive sul sito è impossibile perché utilizziamo un sistema di bilanciamento del carico.

Mi chiedo, è accurato? Esistono load balancer che supportano Keep-alive?

Mi sembra strano che l'API della velocità della pagina si lamentasse di Keep-alive se fosse impossibile utilizzarlo con i bilanciatori del carico perché immagino che una buona quantità di applicazioni e siti di grandi dimensioni utilizzino i bilanciatori del carico.

Grazie!

+0

Comunicare loro di passare a HAProxy e abilitare le connessioni persistenti HTTP. :) – bzlm

+0

In questo modo si ottiene una differenza di prestazioni o semplicemente si mantiene keep-alive nelle intestazioni di risposta? –

+0

Se non si conoscono esattamente le connessioni persistenti HTTP, non si deve chiedere agli sviluppatori di back-end e agli amministratori sys di implementarlo. – bzlm

risposta

5

Non so quale tipo di bilanciamento del carico hai ... ma non penso che impedirebbe l'uso di connessioni keep-alive.

Il servizio di bilanciamento del carico gestirà ogni connessione in entrata a uno dei server di back-end. Ora per ogni oggetto il browser deve creare una nuova connessione solo per recuperare quell'oggetto (ad esempio tutte le immagini di piccole dimensioni). Stabilire e chiudere le connessioni TCP richiede del tempo. Questo è il motivo per cui Google Page Speed ​​suggerisce di mantenere attiva la funzione keep-alive. Un'altra opzione è mettere tutte le tue piccole immagini in un'unica grande immagine e usare gli sprite css per visualizzarne una parte in diversi punti della pagina.

Ma torniamo al bilanciamento del carico. Se si dispone di un servizio di bilanciamento del carico di rete, dovrebbe funzionare senza alcuna domanda, semplicemente reindirizzando la connessione TCP in entrata a uno dei server di back-end. Se si dispone di bilanciamento del carico HTTP, accetterà la connessione, leggerà la richiesta, invierà la richiesta al server back-end, attenderà che risponda e rispedisca la risposta al browser. Se si abilita keep-alive, il servizio di bilanciamento del carico dovrebbe inoltrare la richiesta successiva che riceve sulla stessa connessione.

Per le pagine dinamiche non è necessario mantenere in memoria. Keep-alive è utile principalmente per il contenuto statico (js, images, css) come per ciascuna pagina html di solito più di 10 oggetti statici. Quindi suggerirei di continuare a servire html attraverso il load balancer e di pubblicare il contenuto statico su hostname diversi (static.example.com).