Limita a largura de banda de solicitações HTTP individuais sem afetar a largura de banda total

4

Analisando ferramentas como tc , wondershaper , htb e comcast , todas essas ferramentas parecem operar no nível de uma interface de rede ou, pelo menos, um" grupo de conexão "para limitar a largura de banda. Eu gostaria de não limitar a largura de banda para um grupo de conexões, mas, em vez disso, diminuir a taxa máxima de conexões individuais.

Especificamente: Existe uma ferramenta disponível que eu possa usar para moldar a taxa máxima de download de solicitações HTTP individuais?

Detalhes

O que eu quero fazer é emular solicitações lentas para buscar em buckets no S3. Vejo que, para solicitações distantes de um data center, o download de um item individual é geralmente lento (< 500 kb / s), mas o download em paralelo gera velocidades de download > 5 mb / s.

Provavelmente, posso fazer parte do caminho adicionando latência a essas solicitações (o que fica mais lento nas solicitações em série, mas não na largura de banda geral), mas uma solução mais direta seria ótima.

    
por turtlemonvh 24.12.2016 / 02:49

2 respostas

2

A configuração limit_rate de nginx parece superar alguns dos problemas em lula e verniz, como recomendado por outros respondedores. Dos documentos:

Limits the rate of response transmission to a client. The rate is specified in bytes per second. The zero value disables rate limiting. The limit is set per a request, and so if a client simultaneously opens two connections, the overall rate will be twice as much as the specified limit.

Para o meu cenário, onde estou procurando limitar a taxa de bytes de download transferidos para arquivos grandes para solicitações individuais sem limitar a largura de banda geral de um cliente, é exatamente disso que eu preciso.

Lula

agrupamentos de atrasos agrupam clientes (geralmente por IP) e usam uma limitação de taxa com intervalos. No entanto, até os documentos dizem :

You can not limit a single HTTP request's connection speed.

Verniz

Varnish vmod_vsthrottle (e da mesma forma libvmod-throttle ) funciona com um algoritmo de token bucket e pega chaves arbitrárias. A implementação parece muito legal, mas parece que não há uma boa maneira de desacelerar o tráfego. Em vez disso, solicitações acima de um limite (em req / s) são respondidas com algo parecido com um 429 .

    
por 26.12.2016 / 23:31
3

De acordo com sua exigência, eu gostaria de sugerir Varnish e é um servidor de cache HTTP altamente considerado. Ele fica na frente da camada do servidor da Web e armazena em cache o conteúdo na RAM, para que as solicitações subsequentes sejam exibidas o mais rápido possível.

O seguinte artigo de referência foi demonstrado de forma muito bem como instalar e configurar o verniz em um servidor da Web no CentOs.

Existem dois arquivos de configuração para editar, / etc / sysconfig / verniz e /etc/varnish/default.vcl .

Editando default.vcl , você pode otimizar seus problemas de largura de banda. Eu já instalei em meus servidores.

Como exemplo, as configurações são parecidas com as seguintes.

backend web1 {
    .host = "PUBLIC_IP_ADDRESS";
    .port = "80";
    .probe = {
        .url = "/";
        .interval = 5s;
        .timeout = 1s;
        .window = 5;
        .threshold = 3;
    }
}

Mais referências: Configuração do Varnish 4 no CentOS 6 como Servidor de Cache e Balanceador de Carga

    
por 24.12.2016 / 09:33

Tags