Desempenho do Nginx ao executar várias instâncias na mesma máquina

2

Estou tentando entender o impacto no desempenho de ter várias instâncias nginx (mestres) em execução na mesma máquina, em vez de carregá-las em uma única instância usando blocos de servidores diferentes. Como o uso de várias instâncias do nginx afeta coisas como otimização de processos_de_processamento e de conexões de trabalho?

Eu vejo vários conselhos indicando que worker_process deve espelhar o número de núcleos e, no máximo, deve ser o dobro do número de núcleos. Eu também estou entendendo que o worker_connections deve coincidir com o ulimit, ou estar um pouco abaixo do ulimit. Disponibilizar muitas conexões ou ter muitos funcionários por núcleo prejudicará o desempenho.

Eu tenho dois núcleos e um ulimit de 1024, mas tenho 4 instâncias de nginx, cada uma com as seguintes configurações:

worker_processes 4;
worker_connections: 1024;

Isso não tem o mesmo efeito de eu ter worker_processes 16; e worker_connections 4069; ?

Nota: Deixe-me esclarecer quando digo instâncias nginx, quero dizer que existem 4 processos nginx master independentes, cada um alimentado com um arquivo de configuração diferente que possui configurações semelhantes, e cada uma com seus próprios trabalhadores.

Nota 2: Este cenário é algo que eu herdei e já está em vigor. Eu estou tentando descobrir se devo mudar a maneira como o nginx está configurado e ter uma razão informada para isso.

    
por eddiemoya 11.08.2015 / 18:07

1 resposta

1

Do ponto de vista do sistema, não há diferenças inerentes na execução de 4 mestres com 4 seções de servidor ou em um único mestre com 16 seções de servidor. Implementa a mesma arquitetura: processos baseados em eventos paralelizados.

A relação trabalhador / núcleo deve ser contabilizada pelo total de trabalhadores em todos os seus mestres, se você tiver vários. Isso vem de várias restrições:

  • certifique-se de que as CPUs não estejam sobrecarregadas, portanto, o número de trabalhadores deve ser < = número de núcleos
  • certifique-se de que o paralelismo e o planejamento do sistema operacional sejam usados da melhor maneira possível, portanto, o número de trabalhadores deve ser o mais alto possível
  • Trabalhadores do servidor HTTP estão com pouca utilização da CPU e esperam principalmente em E / Ss, portanto, é realmente seguro alocar algo entre 2 ou 4x o número de núcleos

Deve ser um pouco mais eficiente com um único mestre, já que alguns recursos como mapas MIME e assim por diante só serão carregados uma vez. Mas esse é um ponto menor.

Deve ser mais eficiente com um único mestre, porque existe um único grande grupo de trabalhadores compartilhados por todos os servidores. Se um único servidor exigir momentaneamente a maioria dos trabalhadores (digamos 16), ele poderá obtê-los. Na configuração multi-master (digamos 4 mestres com 4 trabalhadores), eles só conseguem usar no máximo o que eles têm: 4 trabalhadores. Por outro lado, pode ser o efeito desejado: estritamente dividido em 4 instâncias para garantir que cada um receba pelo menos o quarto da atenção do seu anfitrião. Mas nunca mais.

Deve ser mais fácil configurar e manter com 1 mestre (pense em atualizações de segurança).

Deve ser mais resiliente com 4 mestres: você tem permissão para travar ou bagunçar totalmente uma configuração principal sem tocar nos outros três.

A menos que seus 4 mestres usem versões diferentes do Nginx, você não se beneficiará de ótimas otimizações como ter o conjunto exato de módulos compilados para cada mestre.

    
por 01.09.2015 / 10:43