
Eu tenho um endpoint de serviço da web que estou construindo, onde as pessoas postarão um arquivo xml, e ele realmente será atingido por mais de 1 mil solicitações por segundo.
Agora eles estão enviando esses arquivos xml via postagem http, mas a maioria deles terá taxa limitada.
O problema é que a limitação da taxa será feita pela aplicação web procurando o source_id no xml, e se for superior a x solicitações por minuto, não será processado posteriormente.
Eu queria saber se eu poderia fazer a verificação do limite de taxa no início do processamento de alguma forma e, assim, salvar o arquivo de 50K que lançaria o pipeline para meus servidores da web e consumiria recursos.
Um balanceador de carga poderia fazer uma chamada para verificar o uso da taxa de alguma forma?
Se isso for possível, talvez eu possa colocar o source_id em um cabeçalho de host para que mesmo o arquivo XML não precise ser analisado e carregado na memória.
É possível apenas observar os cabeçalhos do host e não carregar todo o arquivo xml de 50K na memória?
Eu realmente aprecio seus insights, pois isso exige mais conhecimento de toda a pilha tcp/ip, etc.
Responder1
Existem dois tipos básicos de possibilidades:
1) Você está lidando com invasores hostis que não cooperarão com seu projeto. Nesse caso, por que você se importa com o Host
cabeçalho que eles estão enviando? Limite-os de taxa por IP.
2) Você está lidando com clientes cooperantes que impõem mais carga do que você deseja. Nesse caso, basta aceitar a solicitação e enviar uma resposta solicitando que recuem.
Se você tiver uma situação mais complicada que não se enquadre em uma dessas duas categorias simples, a melhor solução provavelmente dependerá de qual é a situação.
Responder2
Você pode bloqueá-lo via Apache com módulos semelhantes. Ou se você quiser eliminá-lo mais cedo, você pode usar a correspondência de strings do iptables para bloquear coisas por meio de um regex.
Responder3
Isto é o quetccomando/utilitário é para - é preciso um pouco de trabalho, mas vale a pena o esforço. Eu o uso para limitar a taxa de transferências para um servidor em uma DMZ fora de nossa LAN corporativa.
Aqui estão alguns links que me colocaram no caminho certo ...
Filtro Tc - Faixas de portas Calculam valor da máscara: http://mailman.ds9a.nl/pipermail/lartc/2007q4/021739.html
Taxa limitando um único host ou máscara de rede: http://lartc.org/howto/lartc.ratelimit.single.html