Qual é o relacionamento entre um nginx worker_process e o PHP-FPM?

2

Me: Novidade no nginx e no FastCGI em geral, desculpas se isso é óbvio, mas o Googling mostra muitas pessoas recomendando valores aleatórios de configuração, mas ninguém explica o raciocínio por trás de suas decisões.

Qual é a relação entre um worker_process nginx e um worker PHP-FPM? Mais trabalhadores nginx significa mais trabalhadores PHP-FPM, ou eles não estão relacionados?

Meu entendimento de como isso funciona em um alto nível é

  1. O usuário solicita uma página da web
  2. o nginx manipula a solicitação, vê que é uma página PHP
  3. mãos nginx pedem para o PHP-FPM
  4. O PHP-FPM manipula a solicitação com um processo existente ou gera novos

O que não está claro para mim se existe algum relacionamento entre o PHP-FPM gerando um novo processo filho e quais processos de trabalho do nginx estão falando com ele. ou seja, se você tivesse dois servidores da Web idênticos, um com worker_process = 4 e outro com worker_process = 8 , e ambos vissem tráfego da Web idêntico, um servidor criaria mais processos filho php-fpm que outro? Ou eu disse algo tão estúpido aqui que mostra que estou perdendo um conceito fundamental? (se sim, o que?)

Não estou tentando resolver um problema específico - apenas tentando aprender a raciocinar sobre o comportamento do nginx e do php-fpm para que eu possa contribuir com o dimensionamento e o brainstorm de desempenho / solução de problemas.

    
por Alan Storm 01.12.2015 / 07:48

2 respostas

2

Processos de trabalho do Nginx conectam ao php-fpm. No entanto, eles o fazem criando conexões assíncronas, considerando-os como upstreams normais, como qualquer outro.

O Nginx é um aplicativo orientado a eventos, o que significa que a maioria das coisas de E / S que ele faz, especialmente conectando-se a upstreams, é assíncrona. Assim, um processo de trabalho teria, a qualquer momento, qualquer número de conexões para um upstream.

O PHP-FPM irá gerar (ou, idealmente por razões de desempenho, usar um processo já gerado mas não usado) para cada requisição que receber.

Então, considerando estes, geralmente não há relação direta entre os dois. Você sempre terá exatamente tantos processos de trabalho no nginx como você define, mas o número de processos php-fpm irá, na maior parte das vezes, variar dependendo do número de pedidos recebidos, o que não está diretamente relacionado ao número de trabalhadores nginx processos.

Pode-se argumentar que, se você ativar o fastcgi keepalive em nginx, os processos do php-fpm permanecerão lá por mais tempo. Considerando que cada processo de trabalho obtém seu próprio pool de conexão para upstreams que usam keepalive, isso pode fazer com que o php-fpm mantenha mais processos em execução em todos os momentos para cada processo de trabalho. No entanto, fastcgi keepalive é quebrado em php-fpm, tanto quanto sei, por isso não deve ser um problema:).

    
por 01.12.2015 / 13:04
1

Não há relação inerente entre as crianças nginx worker_process es e php-fpm. Eles nem precisam estar na mesma máquina! Mas se eles estão na mesma máquina, eles podem competir por CPU (o que geralmente não é um problema, já que o nginx requer muito pouca CPU comparado ao PHP).

    
por 01.12.2015 / 10:05

Tags