Devemos ter um pool para muitos sites no Apache + PHP-FPM?

1

Se houver muitos sites pequenos (cerca de 300) rodando em tráfego leve na Web, todos devem usar o mesmo pool, ou seria melhor ter um pool separado para cada um deles?

Suponhamos que os sites sejam confiáveis e que os benefícios de ter um usuário / grupo separado no pool (por exemplo, melhor controle de acesso / permissões) não sejam considerados aqui.

    
por bobo 13.01.2014 / 23:51

1 resposta

1

Normalmente, prefiro usar um pool por site (mas talvez não aqui, leia tudo).

A principal razão para isso é que é permitir configurações por site php. E essas configurações podem variar de acordo com as necessidades dos sites, mas também para uma melhor separação dos recursos do site. Por exemplo, com diretórios temporários alterados ou open_basedir_settings:

(...)
env[TMP] = /path/to/client/var/tmp
env[TMPDIR] = /path/to/client/var/tmp
env[TEMP] = /path/to/client/var/tmp
env[DOCUMENT_ROOT] = /path/to/client/www
php_admin_value[open_basedir] = ".:/path/to/client/www:/path/to/client/var/tmp:/path/to/client/var/log"
php_admin_value[upload_tmp_dir]="/path/to/client/var/tmp"
(...)

Você também pode usar o modo chroot para php-fpm, mas isso é mais complexo. E neste caso, com um pool chrooted, seria talvez mais fácil usar apenas um pool para todos os clientes (portanto, um chroot compartilhado, que não é muito bom n fato). Isso porque coisas como apc são compartilhadas por todos os pools, e isso significa usar vários pools de chrooted que você pode acabar com vários arquivos com os mesmos caminhos em pools diferentes, e apc armazenaria apenas uma versão em cache do arquivo. Na verdade, no caso do apc + chroot, a melhor solução seria executar várias instâncias do php-fpm, com um pool por instância. Não é uma coisa fácil para 300 sites.

Em seguida, você pode gerenciar quantos processos de php podem ser usados para cada site com o pool pm.[static/dynamic] settings. Note que para 300 sites pequenos isso pode se tornar um problema , se um grande número de sites de teses não estiver ativo, então uma grande parte de sua memória será usada pelo processo de pool que não faz nada.

No seu caso, o tráfego é baixo e os sites são leves, portanto, ter mais de 300 (no mínimo) processo do pool em execução na sua caixa, sem fazer nada, é um overkill . E no seu caso específico, eu acho que usaria um número baixo de pools (talvez você possa agrupar alguns sites, por aplicativos? Por versões? Por necessidades?), Tendo cada pool capaz de executar vários sites. Ou talvez apenas um, eu tentaria usar grupos de sites para aplicar algumas restrições de open_basedir neles, mas se todos fossem realmente os mesmos, você poderia usar apenas um pool.

    
por 15.01.2014 / 13:59