quinta-feira, 8 de novembro de 2007

Banda e latência

Uma colega me procurou dizendo que alguns usuários estão enfrentando um sério problema de lentidão no acesso a um sistema web remoto. Cada transação neste sistema, desde o login até o logout, está demorando da ordem de 50 segundos. A reclamação já foi submetida aos administradores do sistema remoto que fizeram seus testes e disseram que os clientes locais conseguem executar as mesmas transações em dois segundos. Parece óbvio que se trata de um "problema de rede". Mas, a sugestão imediata dos administradores, de "aumentar a banda" do nosso acesso à Internet, pode não resolver o problema.

Como este é um problema comum, resolvi registrar aqui o email que enviei pra colega, pra poder reutilizá-lo no futuro quando outro problema semelhante aparecer. (Personagens e cenários foram modificados para proteger os inocentes. :-)
De fato, o aumento no tempo de acesso parece ser devido às diferentes situações de conectividade de rede entre o cliente e o servidor do sistema. Contudo, nem sempre um aumento de banda resolve esse tipo de problema.

Há duas características de rede que podem influenciar o tempo de resposta de uma transação: banda e latência. Banda é a quantidade de informação que a rede pode transportar por unidade de tempo e latência é o tempo que uma unidade de informação leva pra transitar pela rede de um ponto a outro.

Numa rede local trabalhamos com bandas da ordem de 100Mb/s à 1000Mb/s e latências da ordem de 1ms. Quando trabalhamos com a Internet, tratamos de bandas da ordem de 1Mb/s a 10Mb/s e latências da ordem de 100ms. Ou seja, a banda que temos pra acessar a Internet é 100 vezes menor que a banda de uma rede local e a latência é 100 vezes maior.

Essas duas características influenciam as transações de um sistema de modos diferentes. Há sistemas em que as transações são demoradas e transportam grandes volumes de dados. Imagine um repositório FTP em que as transações são o envio e a recepção de arquivos. Este tipo de sistema é bastante afetado pela banda disponível mas muito pouco afetado pela latência. Pra baixar um arquivo de 1GB da Internet leva mais de duas horas enquanto pra baixá-lo de um servidor local leva só dois minutos.

Outros sistemas são mais afetados pela latência. Imagine que ao invés de o cliente FTP fazer uma requisição para o arquivo inteiro ele precisasse fazer uma requisição para cada bloco de 1MB de dados. O mesmo arquivo de 1GB teria que ser solicitado em 1000 pedacinhos. Imagine também que cada pedaço tivesse que ser recebido antes que o próximo pudesse ser solicitado. Nesse caso, a latência passa a ser mais importante. Se numa rede local com o FTP normal o arquivo pode ser baixado em dois minutos, numa rede com a mesma banda mas com uma latência de 100ms, como ocorre na Internet, a transferência do arquivo levaria 100 segundos a mais devido ao tempo necessário para cada uma das 1000 solicitações de 100ms cada.

Tendo isso em mente é importante analisar o padrão de comunicação do sistema pra determinarmos se a lentidão quando o acesso é via Internet é determinado pela redução de banda ou pelo aumento da latência da rede. Se o padrão de comunicação for determinado por poucas requisições com grande transferência de dados então realmente o aumento na banda pode melhorar a situação. Mas se o padrão for determinado por muitas requisições pequenas, então o aumento de banda não deverá ter efeito significativo.

O ruim nisso tudo é que as soluções na camada de rede ou são caras (aumento de banda) ou inexistentes (não há como reduzir significativamente a latência na comunicação a longa distância).

Eu gostaria de simular o acesso ao sistema pra poder capturar os pacotes de rede e analisá-los pra poder verificar o padrão de comunicação. Parece-me pouco provável que uma aplicação destas tenha grandes volumes de dados trafegando entre cliente e servidor. Não conheço o sistema, mas as aplicações web mais modernas têm incorporado uma série de melhorias na interface utilizando uma tecnologia chamada AJAX. Com ela é possível que entre um clique explícito e outro do usuário o navegador dispare um grande número de requisições HTTP implícitas, o que pode tornar estas aplicações mais sensíveis a um aumento da latência da rede.

Mas isso é apenas conjectura. Se você conseguir um acesso ao sistema e um roteiro de teste eu posso tentar analisar seu padrão de comunicação pra ver se identificamos mais exatamente o problema.
Eu me lembro de ter lido um artigo muito bom sobre isso numa edição antiga da ;login:. Não consegui encontrá-lo, mas achei um outro artigo interessante do Brent Chapman sobre isso. O mais engraçado é que ele resolveu postá-lo exatamente pra poder reutilizá-lo quando tivesse que explicar o mesmo problema no futuro. :-)

4 comentários:

  1. Oi Gu

    Um cara reclamou comigo uma vez que, embora o link nosso fosse rápido, ele estava decepcionado com o desempenho.
    Achei estranho, porque de fato estava bem rápido e com acesso prioritário para a rede academica americana, que era o que ele usava.
    Fui ver o que era e para minha surpresa, ele queria montar diretórios de um servidor Windows de lá no micro dele, usando NETBIOS!!
    Dei-lhe a mesma explicação que você colocou aqui, mas acho que ele até hoje pensa que eu estava enrolando ele. :-)

    ResponderExcluir
  2. Hehe. Cada uma...

    Estava pensando depois em outra possível razão pra lentidão.... perda de pacotes. Ainda não consegui monitorar o acesso à aplicação pra investigar, mas tento ficar atento a outras possibilidades.

    ResponderExcluir
  3. No caso do meu usuário, era latência mesmo. Ele não conseguia entender que bandwidth /= latency.

    ResponderExcluir
  4. Apesar de ser um post antigo, gostaríamos de deixar nossa contribuição.

    A latência (constante, sem jitter) só faz alguma diferença em downloads nos casos em que a conexão tem muita perda de pacotes.
    Para downloads, principalmente grandes, quem manda na taxa de transferência é o throughput de dados (bandwidth) disponível.

    A latência, porém, interfere diretamente onde há muita troca síncrona de comandos, como sessões de FTP com muitos arquivos. Para cada sessão há uma sequência de comandos para que ela seja estabelecida, e esta negociação é diretamente afetada pela latência. Somente após o início do download/upload que passa a valer a banda disponível.

    Parabéns pelo post e um abraço em nome de nossa equipe.

    --
    Alex M. - Suporte Técnico
    Unihost Brasil

    ResponderExcluir