Vamos adotar a abordagem pragmática.
Todos esses limites são codificados e projetados no século passado, quando o hardware era lento e caro. Estamos em 2016 agora, uma torradeira wall-mart média pode processar mais solicitações que os valores padrão.
As configurações padrão são realmente perigosas. Ter centenas de usuários em um site não é nada impressionante.
worker_process
Uma configuração relacionada, vamos explicar enquanto estamos no tópico.
nginx como balanceador de carga:
- 1 trabalhador para balanceamento de carga HTTP.
- 1 trabalhador por núcleo para balanceamento de carga HTTPS.
nginx como servidores da web:
Este é complicado.
Alguns aplicativos / estruturas / middleware (por exemplo, php-fpm) são executados fora do nginx. Nesse caso, um trabalhador nginx é suficiente porque geralmente é o aplicativo externo que realiza o processamento pesado e consome os recursos.
Além disso, alguns aplicativos / estruturas / middleware podem processar apenas uma solicitação de cada vez e é uma sobrecarga para sobrecarregá-las.
De um modo geral, 1 trabalhador é sempre uma aposta segura.
Caso contrário, você poderá colocar um trabalhador por núcleo se souber o que está fazendo. Eu consideraria essa rota uma otimização e recomendaria testes e benchmarking adequados.
worker_connections
A quantidade total de conexões é worker_process * worker_connections
. Metade no modo balanceador de carga.
Agora estamos chegando à parte da torradeira. Existem muitos limites de sistema seriamente subestimados:
- ulimits tem no máximo 1k de arquivos abertos por processo no linux (1k no disco, 4k no disco em alguma distribuição)
- limites systemd é quase o mesmo que ulimits.
- O padrão nginx é 512 conexões por trabalhador.
- Pode haver mais: SELinux, sysctl, supervisord (cada distro + versão é um pouco diferente)
1k worker_connections
O padrão seguro é colocar 1k em qualquer lugar.
É alto o suficiente para ser mais do que a maioria dos sites internos e desconhecidos jamais encontrará. É baixo o suficiente para não atingir outros limites do sistema.
10k worker_connections
É muito comum ter milhares de clientes, especialmente para um site público. Parei de contar a quantidade de sites que eu vi cair devido aos baixos padrões.
O mínimo aceitável para produção é 10k. Os limites do sistema relacionados devem ser aumentados para permitir isso.
Não existe um limite muito alto (um limite simplesmente não tem efeito se não houver usuários). No entanto, um limite muito baixo é algo muito real que resulta em usuários rejeitados e em um site morto.
Mais de 10k
10k é agradável e fácil.
Poderíamos definir limites arbitrários de 1000kk (afinal, é apenas um limite), mas isso não faz muito sentido prático, nunca obtemos esse tráfego e não conseguimos aceitá-lo.
Vamos manter 10k como uma configuração razoável. Os serviços que estão buscando (e podem realmente fazer) mais exigirão ajuste e benchmarking especiais.
Cenário Especial: Uso Avançado
Às vezes, sabemos que o servidor não tem muitos recursos e esperamos picos que não podemos fazer muito. Preferimos recusar usuários do que tentar. Nesse caso, coloque um limite de conexão razoável e configure boas mensagens de erro e manuseio.
Às vezes, os servidores back-end estão funcionando bem e bem, mas apenas com alguma carga , mais alguma coisa e tudo vai para o sul rapidamente. Preferimos desacelerar a travar os servidores. Nesse caso, configure a fila com limites estritos, deixe o nginx armazenar em buffer todo o calor enquanto as solicitações estão sendo drenadas em um ritmo limitado.