Que instalar: Apache Worker ou Prefork? Quais são as (des) vantagens de cada um?

54

Com base nas descrições dos Prefork e Worker MPM, parece que o tipo 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 algumas diretrizes básicas sobre qual tipo escolher com base nas condições?
  • Existem grandes diferenças de desempenho entre os dois?
por Aron Rotteveel 24.07.2009 / 10:47

5 respostas

39

Como dizem os documentos, você deve usar o prefork MPM se precisar evitar a segmentação para compatibilidade com bibliotecas que não sejam thread-safe. Normalmente, qualquer módulo não-trivial do Apache ( mod_php - ou, mais precisamente, a miríade de extensões e bibliotecas às quais ele se vincula - sendo o exemplo canônico) possui algum tipo de biblioteca não thread-safe (ou não -o código seguro em relação a ele), então, a menos que você esteja usando uma instalação Apache bonita, eu usaria o prefork MPM.

    
por 24.07.2009 / 11:04
12

A solução clássica para executar extensões inseguras enquanto atende grandes números (> 100) de conexões simultâneas é executar o PHP em fastCGI (mod_fcgid, um módulo nativo do apache) e solicitações dinâmicas de proxy a partir de uma instância do apache que executa o Worker MPM.

Isso permitiria que você escalasse de algumas centenas até > 1.000 conexões simultâneas com uma quantidade modesta de memória (4 a 8 GB) ao veicular uma mistura de conteúdo estático e dinâmico.

É claro, você também deve investigar as soluções de cache front-end como parte de sua implantação geral (memcached, verniz).

Como alternativa, atualize para o apache 2.4 e seu MPM event nativo, que manipula a simultaneidade de uma maneira muito melhorada (os threads são disparados na conexão, não esperando para serem pesquisados.

    
por 02.04.2012 / 15:21
6

Já se passaram cerca de 3 anos desde que a pergunta foi postada, mas eu recomendo que você vá com MPM de trabalho em vez de pré-fork mesmo usando PHP, para obter o melhor desempenho.

Quanto às diferenças, o pré-fork é não-threaded, portanto, o servidor bifurca um processo para cada solicitação do cliente (pré-bifurca em antecipação a novas solicitações para que o bifurcação não consuma o tempo de resposta). Como os pedidos são servidores em um processo separado, isso geralmente sobrecarrega muito mais sua memória e sua CPU. O trabalhador traz multi-threading, que é mais leve e tem melhor utilização de memória.

    
por 21.10.2012 / 19:02
2

Isso é algo muito específico para o que você está servindo. Se você estiver fazendo muitas conexões estáticas, os segmentos serão mais leves e rápidos. Se você tiver apenas alguns grandes aplicativos gerados constantemente, o prefork pode ter uma vantagem devido a sua maturidade e estabilidade. Por que não apenas configurar o que você precisa, testar um, trocar o módulo MPM, experimentá-lo novamente, ver qual deles melhor para você?

    
por 24.07.2009 / 15:33
1

que precisa do tipo e do 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 irá ajudá-lo a descobrir! link

    
por 16.11.2012 / 16:30