Que característica da rede / TCP causa relação linear entre atividade TCP e latência?

4

O núcleo desse problema é que nosso aplicativo usa websockets para interfaces em tempo real. Estamos testando nosso aplicativo em um novo ambiente, mas estranhamente notamos um atraso crescente nos pacotes de soquetes TCP associados a um aumento na atividade do websocket.

Por exemplo, se um evento websocket ocorrer sem qualquer outra atividade em um período de 1 minuto, a resposta do servidor será instantânea. No entanto, se aumentarmos lentamente a atividade do cliente, a latência na resposta do servidor aumentará com um relacionamento linear (cada pacote levará mais tempo para alcançar o cliente com mais atividade).

Para os que se perguntam, isso NÃO é relacionado ao aplicativo, pois nossos registros mostram que nosso servidor está em execução e responde a solicitações em menos de 100 ms, conforme desejado. O atraso começa quando o servidor processa a solicitação e cria o pacote TCP e o envia para o cliente (e não o contrário).

Arquitetura Esse novo ambiente é executado com um endereço IP virtual e usa keepalived em um balanceador de carga para equilibrar o tráfego entre as instâncias. Duas caixas ficam atrás do balanceador e todo o tráfego passa por ele. Nosso provedor de hospedagem gerencia o balanceador e não temos controle sobre essa parte da arquitetura.

Teoria Poderia isso de alguma forma estar relacionado a algo que armazena em buffer os pacotes no novo ambiente?

Obrigado pela sua ajuda.

    
por crockpotveggies 03.06.2012 / 02:12

2 respostas

3

Buffer parece uma teoria razoável. Eu tomaria uma captura de pacotes dos seus servidores de aplicativos para ter certeza de que você não vê nada como retransmissões ou outro comportamento possivelmente anormal no fluxo de tcp (ou seja, a janela tcp zerar?). Wireshark com um filtro de captura para o IP do cliente funcionaria para isso.

Se você verificar que a captura de pacote parece limpa, pedir ao seu provedor para executar uma captura de pacote no balanceador de carga para que você possa analisar é uma solicitação razoável.

Por fim, você testou de vários locais e máquinas diferentes? Talvez o armazenamento em buffer esteja em algum lugar entre o cliente e o provedor, ou algo estranho esteja acontecendo com o cliente (a execução de uma captura de pacote no cliente, bem como seus servidores ao mesmo tempo, pode ser esclarecedora também).

    
por 03.06.2012 / 02:34
2

Na verdade, é um comportamento esperado. À medida que a quantidade de dados aumenta, o tamanho da janela de transmissão aumenta, o que, até certo ponto, aumentará o tamanho dos pacotes enviados. Pacotes maiores significam mais eficiência (menos sobrecarga e tempo gasto para confirmações), mas também significam mais latência. Esta é a troca para manter a entrega confiável ao mesmo tempo em que mantém qualquer tipo de rendimento em redes de latências e larguras de banda amplamente variáveis.

Verifique o sinalizador PSH para fazer com que o TCP libere buffers mais cedo. Pode fazer uma diferença marginal em algumas circunstâncias. No entanto, se você procura latência consistentemente baixa para muitas mensagens pequenas, pode ser mais bem atendido no UDP - o que significa que você terá que garantir a entrega por conta própria, mas poderá perceber um pouco mais de consistência. / p>     

por 03.06.2012 / 03:08

Tags