
Estou executando o Server2016 em duas VMs com IIS instalado, usando NLB para equilibrar o tráfego e configuração/ssl compartilhado. Minhas velocidades de upload parecem limitadas a 256 KB/s (2 Mb). Minha conexão com a internet é fibra gigabit.
Fiz alguns testes para tentar isolar o problema. Criei um aplicativo da web .net simples com um botão de upload e envio e carreguei um arquivo de 28 MB.
Quando coloco o aplicativo na minha caixa IIS emhttps://domínio.tld/upload, demorou 1,9 minutos de acordo com as ferramentas de desenvolvimento do Chrome, o que equivale a aproximadamente 256 KB novamente.
Usei o visual studio para fazer isso, então apenas executei o aplicativo em minha máquina desktop win 10 via IIS express e abri a porta aleatória através do meu roteador, e o upload levou 761 ms, o que é aproximadamente ~ 37 MB/s
Repeti esses testes algumas vezes e obtive praticamente os mesmos resultados. Dado que estou fazendo upload e download da mesma caixa, ele está realmente usando ~ 74 MB/s-ish, ou 30% do meu upload e download teórico de gigabits cada. Então, sinto que não é um problema do ISP.
Também tentei quebrar o cluster NLB e rotear todo o tráfego para apenas uma caixa, mesmo resultado.
Alguma idéia de por que o IIS é tão lento?
Responder1
Postando isso caso alguém esteja curioso.... o problema era o NLB.
Para o tráfego de saída não é grande coisa, mas você precisa fazer alguns ajustes na rede para que funcione "corretamente".
- Unicast: como ambos os nós têm seu MAC substituído pelo mesmo endereço MAC de 'cluster', seu switch de rede ficará maluco porque não poderá atualizar corretamente sua tabela de roteamento e inundar todas as portas. A solução é usar um hub ou uma vlan separada.
- Multicast: cada nó retém seu endereço MAC e obtém um MAC multicast adicional. Os switches não podem 'aprender' o MAC, pois ele não está conectado à NIC física; portanto, eles descartam os pacotes ou inundam como o unicast. A solução é adicionar entradas estáticas ARP e MAC à sua rede.
- Mutlicast IGMP: O mesmo que multicast, mas requer switches com capacidade IGMP para que possam 'aprender' como seu multicast deve funcionar. Portanto, não há solução, funcionará ou não.
Após testes adicionais, ao carregar um arquivo grande para nosso cluster IIS, veríamos um péssimo desempenho de rede em outras máquinas/VMs no mesmo switch, então isso pareceria confirmar o problema de inundação.
Na minha situação específica, no meu ambiente de trabalho, os funcionários da rede disseram "não" a quaisquer alterações na infraestrutura da rede, incluindo a ativação do IGMP.
Queríamos apenas dois servidores para alta disponibilidade, então decidimos criar um cluster de failover de dois nós com um disco compartilhado para uma testemunha e um disco compartilhado para configuração compartilhada do IIS e SSL centralizado. Não é ativo-ativo, mas podemos manter o tempo de atividade durante a aplicação de patches, etc. Eu sei que não é recomendado para o IIS fazer um cluster, mas na ausência de um balanceador de carga de hardware ou de uma rede que você possa configurar corretamente, isso terá que fazer :)