Com base nas descrições do Prefork e Worker MPM, parece que o tipo de prefork está um pouco desatualizado, mas não consigo encontrar uma comparação adequada dos dois tipos.
O que eu gostaria de saber:
- Quais são as diferenças entre as duas versões?
- Quais são as (des) vantagens de cada tipo de servidor?
- Existem diretrizes básicas sobre qual tipo escolher com base nas condições?
- Existem grandes diferenças de desempenho entre os dois?
apache-2.2
mpm-worker
mpm-prefork
Aron Rotteveel
fonte
fonte
Respostas:
Como dizem os documentos, você deve usar o MPM prefork se precisar evitar o encadeamento para compatibilidade com bibliotecas que não são seguras para threads. Normalmente, qualquer módulo não-trivial do Apache (
mod_php
- ou, mais precisamente, a infinidade de extensões e bibliotecas às quais ele se vincula - sendo o exemplo canônico) tem algum tipo de biblioteca não-thread-safe (ou não-thread-safe). código seguro), então, a menos que você esteja usando uma instalação bonita do Apache, eu optaria pelo MPM pré-fork.fonte
php-fpm
via via FastCGI. Então o MPM de trabalho está bem - então o fpm executará todas as solicitações de PHP em um próprio processo enquanto o Apache pode executar threads. O problema do PHP-Thread-safety apenas o impede de usarmod_php
, que executa o PHP dentro do processo Apache.A solução clássica para executar extensões inseguras enquanto atende a um grande número (> 100) de conexões simultâneas é executar o PHP em fastCGI (mod_fcgid, um módulo apache nativo) e solicitações dinâmicas de proxy a partir de uma instância apache que executa o MPM do Trabalhador.
Isso permitiria escalar de algumas centenas a mais de 1000 conexões simultâneas com uma quantidade modesta de memória (4 a 8 GB) ao exibir uma mistura de conteúdo estático e dinâmico.
Obviamente, você também deve investigar soluções de cache de front-end como parte de sua implantação geral (memcached, verniz).
Como alternativa, atualize para o apache 2.4 e seu evento nativo MPM, que lida com a simultaneidade de uma maneira muito melhorada (os threads são disparados na conexão, sem esperar pela pesquisa).
fonte
Já se passaram cerca de 3 anos desde que a pergunta foi publicada, mas eu recomendaria que você trabalhasse com MPM de trabalho, em vez de pré-bifurcação, mesmo se estiver usando PHP, para obter o melhor desempenho.
Quanto às diferenças, a pré-bifurcação não é encadeada, portanto, o servidor bifurca um processo para cada solicitação do cliente (pré-bifurca-se na antecipação de novas solicitações, para que a bifurcação não consuma tempo de resposta). Como as solicitações são do servidor em um processo separado, isso geralmente sobrecarrega sua memória e CPU muito mais do que. O trabalhador traz multithreading, mais leve e com melhor utilização da memória.
fonte
Isso é algo muito particular para o que você está servindo. Se você estiver fazendo muitas pequenas conexões estáticas, os threads serão mais leves e mais rápidos. Se você tiver poucos aplicativos grandes constantemente gerados, o prefork pode ter uma vantagem devido à sua maturidade e estabilidade. Por que não apenas configurar o que você precisa, testar um, trocar o módulo MPM, tentar novamente, ver qual combina melhor com você?
fonte
que precisa do tipo e tipo de tráfego que você terá. E também primeiro você precisa entender a principal diferença entre o prefork e o worker. Espero que o artigo abaixo o ajude a descobrir! http://slashroot.in/how-is-nginx-different-from-apache
fonte