Respostas lentas da web a dispositivos móveis entopem meus funcionários do apache

3

Estou executando um servidor da Web (apache, mas não acho que haja realmente uma diferença), que atende a muitos pedidos de dispositivos móveis (centenas por segundo). O servidor é uma mistura de um servidor web puro com servidor front-end para um servidor de aplicativos J2EE (conectando-se através de algo como AJP).

O que eu noto é que eu regularmente tenho que aumentar a quantidade de funcionários do Apache para acompanhar a quantidade de solicitações. E quando o gargalo começa a acontecer, vejo uma grande quantidade (~ 90%) de trabalhadores ocupados com "Writing to client" e "Closing connection".

Eu entendo que isso é normal. Considerando que os clientes estão em um link mais lento, o trabalhador do Apache será retido até que o funcionário possa lidar com uma solicitação individual do cliente. Mas eu queria saber se existe um sistema dedicado, h / w ou s / w que pode armazenar em buffer o tráfego em ambos os request / e resposta. Eu já ouvi falar de todo esse hardware de "aceleração de tráfego", mas eu realmente não sei onde começar a procurar o que fará exatamente isso.

Obrigado!

    
por Pawel Veselov 15.12.2011 / 23:37

2 respostas

2

Já que você mencionou o hardware, você pode querer ver algo como o BigIP da F5, que pode fazer uma enorme diferença em situações como essa. Ele encerrará essas conexões de clientes móveis (e outros), armazenará o conteúdo em spool e otimizará os fluxos de back-end. Mas é uma coisa cara.

Outro truque com clientes móveis é que eles geralmente perdem pacotes devido à força do sinal abaixo do ideal, em oposição ao congestionamento do link. Isso faz com que a pilha TCP / IP recue, para que as taxas de dados possam ser terríveis. BigIP pode ajudar situações como esta também, então pode valer a pena investigar.

Na frente do código-fonte aberto, você pode considerar o fronting com nginx ou outro proxy de E / S assíncrona para frontear o sistema e possivelmente armazenar um pouco essas conexões. Este é provavelmente um bom primeiro passo para tentar - você pode habilitar o buffer de proxy no nginx, então o efeito será descarregar as conexões para o nginx ao invés do apache e seus aplicativos dinâmicos por trás dele.

    
por 17.12.2011 / 23:23
2

Tente definir Keepalive Off na sua configuração do Apache Vhost.

Às vezes, as conexões móveis são intermediadas por um servidor que artificialmente manterá as conexões abertas enquanto elas reescrevem os pacotes de forma que o usuário móvel obtenha pacotes ACK mais rapidamente do que o servidor os tenha realmente ACKed.

É sorrateiro, mas às vezes as redes móveis são más.

    
por 16.12.2011 / 00:33