BLOG | NGINX

Desempenho do NGINX WebSocket

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Rick Nelson
Rick Nelson
Publicado em 24 de junho de 2014

Testamos recentemente a escalabilidade do NGINX para balanceamento de carga de conexões WebSocket . Mesmo com 50.000 conexões WebSocket ativas, o NGINX exigiu menos de 1 Gb de memória e menos de 1 núcleo de capacidade de CPU e, quando carregado com conexões muito ocupadas, o uso de memória foi estável e aumentou mais lentamente do que o tamanho da mensagem. O desempenho no seu ambiente dependerá da natureza do seu aplicativo, mas os resultados desses testes podem fornecer alguma indicação da quantidade de recursos que você pode esperar que o NGINX use.

Ambiente de teste

As seguintes máquinas foram usadas para este teste:

  • Gerador de carga – thor em um Xeon EX5645 de 6 núcleos @ 2,40 GHz, 48 GB de RAM
  • NGINX – Versão 1.7.0, x86_64 com 6 workers em um Xeon E5645 de 6 núcleos a 2,40 GHz, 48 GB de RAM
  • Backend WebSocket – Servidor Node.js echo em um Xeon E5-2660 0 de 4 núcleos a 2,20 GHz, 8 GB de RAM

Testes

Fizemos dois conjuntos de testes.

O primeiro conjunto de testes simulou conexões de longa duração e, em sua maioria, ociosas. O número de conexões variou de 1.000 a 50.000, o tamanho das mensagens de 10 a 4.096 bytes e a frequência das mensagens de 0,1 a 10 segundos (o que consideramos baixo).

Os resultados mostram que a memória total necessária para conexões WebSocket depende do número de conexões e que a memória usada por conexão é consistente. A utilização da memória não é afetada pelo tamanho ou frequência da mensagem. A utilização da CPU basicamente acompanha o número de conexões e mesmo com 50.000 conexões não foi utilizado um núcleo completo da CPU. A utilização da CPU representada aqui é normalizada para um único núcleo somando a utilização da CPU em todos os núcleos. Os gráficos a seguir mostram os resultados para este conjunto de testes:

conexão1


CPU1


mem1


memk1

O segundo conjunto de testes simulou conexões de curta duração, mas altamente ativas. O número de conexões simultâneas foi mantido constante em 500, com 50 mensagens por conexão e sem atraso entre as mensagens. O tamanho da mensagem variou de 1 a 4096 bytes

Os resultados mostram que, com um número fixo de conexões simultâneas, a utilização total da memória é um fator do tamanho da mensagem, assim como a memória usada por conexão, mas em ambos os casos a quantidade de memória não varia muito e varia de maneira sublinear, aumentando em menos de 15%.

tamanho2


CPU2


mem2


memk2

Resumo

Durante esses testes, o NGINX apresentou desempenho previsível e escalável ao fazer proxy de servidores WebSocket. Esses foram testes sintéticos e não necessariamente representativos de uma aplicação do mundo real, portanto, os resultados dos testes feitos em outros sistemas podem ser diferentes. Para mais informações, consulte:


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."