Comparação de manipuladores PHP: CGI, FPM e LSAPI no alojamento

Comparação de manipuladores PHP mostra claramente como CGI, PHP-FPM e LSAPI controlam a execução de scripts PHP e, assim, caracterizam a latência, o isolamento e os requisitos de RAM no alojamento. Explico as diferenças de uma forma prática, categorizo-as de acordo com as cargas de trabalho e dou recomendações para a seleção e configuração no funcionamento diário.

Pontos centrais

  • DesempenhoO LSAPI lidera em latências de cauda, o PHP-FPM fornece tempos de resposta muito constantes.
  • SegurançaO CGI separa estritamente, o PHP-FPM isola com pools, o LSAPI encapsula por utilizador.
  • RecursosO LSAPI poupa RAM, o PHP-FPM mantém-se eficiente, o CGI gera despesas gerais.
  • CompatibilidadeO PHP-FPM adapta-se ao Apache/Nginx, o LSAPI brilha com o LiteSpeed.
  • PráticaPara CMS e lojas, utilizo sobretudo PHP-FPM; muito tráfego beneficia frequentemente do LSAPI.
Comparação dos manipuladores de PHP modernos no alojamento - CGI, FPM e LSAPI no centro de dados

Noções básicas de manipuladores PHP

Um manipulador de PHP liga o servidor Web ao ficheiro Intérprete de PHP. CGI inicia um novo processo para cada pedido e assim consegue uma separação muito limpa entre contas. Essa separação custa tempo porque cada solicitação recarrega as extensões e a configuração. O PHP-FPM mantém os trabalhadores persistentes e distribui os pedidos por pools, o que reduz os custos de arranque e mantém a latência baixa. O LSAPI integra-se profundamente com o LiteSpeed e usa processos muito leves e de longa duração para Alta eficiência.

O Mod_php integra o PHP diretamente no servidor Web, mas o isolamento é fraco. Prefiro os manipuladores modernos porque minimizam as fontes de erro e mantêm a plataforma mais estável sob carga. Se alojar muitos utilizadores num sistema, beneficia claramente de Contextos de utilizador. É precisamente aqui que os pools do FPM e o LSAPI se destacam. O CGI continua a ser uma opção segura mas lenta para sítios muito pequenos e cenários de teste especiais.

Tabela de comparação: Pontos fortes e cenários de aplicação

A tabela seguinte resume as principais caraterísticas e atribui-lhes cargas de trabalho típicas. Utilizo-a como um auxílio rápido à tomada de decisões para alojamento php-configurações com CMS, lojas ou APIs. Note-se que o desempenho efetivo também depende do perfil de cache, armazenamento e rede. No entanto, a visão geral fornece um ponto de partida sólido para uma seleção inicial. Em seguida, afino a configuração com base em perfis de carga específicos e Valores medidos.

manipulador Desempenho Segurança Consumo de RAM Escalabilidade Adequado para
CGI Baixa Muito elevado Elevado Baixa Testes, páginas estáticas ou raramente acedidas
PHP-FPM Muito elevado Elevado Baixa Elevado Alojamento partilhado, CMS, APIs
LSAPI Mais alto Médio a elevado (por utilizador) Muito baixo Muito elevado Tráfego elevado, comércio eletrónico, concorrência

A CGI pontua com Separação, mas sofre com os custos de arranque do processo. O PHP-FPM oferece a melhor relação entre latência, taxa de transferência e isolamento em sistemas com Apache ou Nginx. O LSAPI oferece latências de cauda muito baixas com alta concorrência em pilhas LiteSpeed. Se você não usa um servidor LiteSpeed, o FPM oferece o suporte mais amplo. Para sites muito pequenos, eu fico com configurações simples; para projetos em crescimento, eu mudo para FPM ou LSAPI.

Desempenho sob carga: latência e taxa de transferência

Com o aumento da concorrência, as latências P95/P99 e a Estabilidade da taxa de transferência. O LSAPI mantém as cargas mais altas com tempos de resposta surpreendentemente consistentes. O PHP-FPM vem logo atrás e reage muito bem ao ajuste do pool, por exemplo, com números de processo dinâmicos. O CGI perde velocidade visivelmente assim que chegam muitos pedidos curtos. Para medições mais detalhadas, consulte meu Comparação de desempenho, que abrange as cargas de trabalho típicas do CMS e da loja.

Combino sistematicamente FPM ou LSAPI com OPcache, para que o bytecode não seja constantemente gerado de novo. Além disso, as caches de proxy reverso reduzem o número de acessos ao PHP para conteúdo recorrente. Uma fila de trabalho vale a pena para tarefas de computação intensiva para que as solicitações de front-end permaneçam rápidas. Se você quiser intercetar picos esporádicos, use o dimensionamento de rajadas de curta duração por meio de trabalhadores FPM adicionais. Isso mantém as latências de cauda dentro dos limites e o Tempos de resposta consistente.

Segurança e isolamento no alojamento partilhado

O que conta em ambientes multiutilizadores Isolamento pelo menos tanto quanto a velocidade. CGI consegue uma separação muito limpa através de processos por pedido, mas com muita sobrecarga. O PHP-FPM isola por pool e permite limites rígidos para memória, tempo de execução e número de processos. O LSAPI também atribui processos a contas, mas está ligado à pilha LiteSpeed em pormenor. Se você quiser categorizar os riscos, é melhor ler meu artigo sobre Partilhar o risco com o FPM e estabelece limites claros.

Defino uma conta separada para cada conta. piscina com o seu próprio UID/GID e direitos restritivos. Isto limita o raio de possíveis ataques e impede que scripts defeituosos vejam dados externos. Isto inclui limites de memória, pedidos máximos por trabalhador e tempos limite. Actualizações regulares e permissões de ficheiros seguras completam o conceito. Reduzo ao mínimo os scripts de administração que estão abertamente disponíveis na rede ou protejo-os com Autenticação.

Consumo de recursos e gestão da RAM

A RAM determina frequentemente Custos e densidade por servidor. O LSAPI ganha pontos aqui com uma pegada muito pequena por processo e comutações de contexto económicas. O PHP-FPM também permanece eficiente se eu criar pools dinamicamente e dimensionar os limites corretamente. O CGI desperdiça memória devido ao recarregamento frequente de extensões e, portanto, não é adequado para projectos dinâmicos. Se alojar muitas contas, o FPM ou LSAPI dá-lhe significativamente mais reservas por nó e mantém o Custos totais planeável.

Meço regularmente os picos de RAM e observo a sua distribuição ao longo do dia. Os picos indicam números de trabalhadores muito baixos ou estratégias de cache desfavoráveis. Reduzo a demanda com um dimensionamento mais fino do pool e um ajuste direcionado do OPcache. Isso reduz os riscos de swap e evita exceções imprevisíveis de latência. Em hosts superlotados, eu movo os Sítios nos seus próprios nós antes que o desempenho global seja afetado.

Compatibilidade com Apache, Nginx e LiteSpeed

A escolha do servidor Web orienta a decisão na fase de manipulador. O PHP-FPM funciona de forma excelente por trás do Nginx e pode ser conectado de forma limpa ao Apache via proxy. Em ambientes Apache, recomendo mpm_event, ajuste de keep-alive e uma configuração de proxy estável. O LSAPI desenvolve todo o seu potencial com o LiteSpeed e lê ficheiros .htaccess de forma eficiente. Aqueles que já usam o LiteSpeed geralmente obtêm o último pedaço de desempenho com o LSAPI. Desempenho fora.

Para conteúdo estático, utilizo o Nginx ou o LiteSpeed diretamente a partir da cache do servidor Web. O PHP só processa o que precisa de permanecer dinâmico. Essa separação reduz a carga no manipulador e economiza tempo de CPU. Como efeito secundário, a consistência do TTFB aumenta com pedidos de página recorrentes. Isso mantém os front-ends responsivos, mesmo quando Backends estão sob pressão.

Melhores práticas para pools PHP FPM

Começo com um conservador Disposição da piscina por sítio e medir os picos reais. Em seguida, ajusto pm, pm.max_children, pm.start_servers e pm.max_requests. Os pools demasiado pequenos fazem os pedidos esperar, os pools demasiado grandes consomem RAM e geram mudanças de contexto. Para WordPress, WooCommerce ou TYPO3, geralmente escolho dinâmico ou sob demanda e regulo os limites com firmeza. Detalhes sobre pm.max_children podem ser encontrados no meu guia pm.max_children resumido.

Eu estabeleço limites como memory_limit e max_execution_time por pool. Isso evita que scripts individuais bloqueiem recursos ou fiquem fora de controle. request_terminate_timeout protege contra processos suspensos que, de outra forma, se acumulariam. max_input_vars e upload_max_filesize são sensivelmente protegidos, dependendo do projeto. Isso mantém os pools controlável e o anfitrião é estável.

Caching e OPcache na prática

Para mim, o OPcache faz parte de todos os Instalação do PHP. Eu ativo-o, verifico o tamanho e monitorizo a taxa de sucesso. Para muitas implementações, defino file_cache_only e ajusto revalidate_freq para que as implementações tenham efeito rapidamente. Também utilizo caches de proxy reverso e plug-ins de cache de página no CMS para reduzir a taxa de acerto do PHP. Quanto menos pedidos acabarem no PHP, melhor será a escalabilidade tudo.

Quem utiliza sessões do lado do servidor de forma intensiva beneficia frequentemente do Redis. Regulo os TTL e faço uma gestão rigorosa dos limites de memória. Para a cache de página inteira, considero as chaves de cache e as estratégias de invalidação para que as lojas entreguem corretamente após alterações de preço ou de stock. Um plano de cache claro poupa CPU, RAM e tempo. A interação da OPcache, da cache proxy e da Cache de aplicações determina, em última análise, a velocidade percepcionada.

Matriz de decisão: Que gestor se adequa a que projeto?

Os pequenos sítios com pouco tráfego funcionam em segurança com PHP-FPM e limites conservadores. Ambientes de teste puros ou requisitos especiais de conformidade podem tornar o CGI útil, apesar da perda de velocidade. Lojas de alto tráfego e APIs altamente competitivas geralmente se beneficiam do LSAPI no LiteSpeed. Se precisar de compatibilidade e flexibilidade máximas, pode confiar no FPM. Para hospedar php com WordPress ou WooCommerce, eu prefiro o FPM como um versátil Todo-o-terreno antes.

Nunca tomo uma decisão apenas com base num parâmetro de referência. Em vez disso, meço a mistura real de visitas estáticas, páginas dinâmicas e chamadas de API. O tempo médio de script e a proporção de acessos à cache também influenciam a escolha. Também tenho em conta os hábitos dos administradores, tais como implementações frequentes ou processos de construção. A melhor solução continua a ser aquela que funciona em condições reais Condições estável e rápido.

Custos, licença e funcionamento - o que é que compensa?

Sobre os pontos de vista puramente económicos FPM atrativo, uma vez que não exige licenças adicionais. O LSAPI pode reduzir os custos operacionais por site através de uma melhor densidade e latências mais baixas, mas requer licenças LiteSpeed em euros. Para muitos clientes pagantes, isto compensa muitas vezes, mas normalmente não para projectos de passatempo. O CGI causa custos indirectos através da utilização ineficiente de recursos e de tempos de resposta mais longos. Por isso, calculo o funcionamento global e poupo onde faz sentido. qualidade não é posta em causa.

A capacidade de planeamento continua a ser importante. Um anfitrião com excesso de reservas poupa dinheiro a curto prazo, mas paga-o com tempo de inatividade e utilizadores insatisfeitos. As modernas ferramentas de observação ajudam a reconhecer os estrangulamentos numa fase inicial. Aqueles que aumentam regularmente a capacidade mantêm as latências estáveis e aliviam a carga sobre o suporte. No final, a solução que conserva os recursos e minimiza Tempo de atividade elevado.

Versões multi-PHP, implementações e tempo de inatividade zero

Na vida quotidiana, utilizo frequentemente vários Versões PHP em paralelo. Com o FPM, isto é conseguido de forma limpa através de pools separados e sockets separados para cada versão. Isto permite-me migrar os sítios passo a passo sem perturbar o sistema global. Planeio actualizações contínuas: primeiro a fase de teste, depois um pequeno grupo de produção e depois o resto. Recargas graciosas (FPM: recarregar em vez de reiniciar) evitam os arranques forçados e mantêm as ligações abertas. Com o LSAPI, utilizo mecanismos análogos na pilha LiteSpeed para pré-aquecer os trabalhadores e minimizar o efeito de arranque a frio.

Para implementações com tempo de inatividade zero, presto atenção às estratégias de lançamento atómico com ligações simbólicas e Validação da OPcache. Após a troca, eu limpo seletivamente os caches sem descartar tudo. Isso mantém as latências de cauda estáveis e as novas implantações chegam rapidamente a um estado quente. Importante: as permissões e os proprietários dos arquivos devem estar corretos, caso contrário, os trabalhadores FPM ou LSAPI bloquearão novas versões.

Sockets vs. TCP: decisões arquitectónicas com consequências

O manipulador é ligado através de Soquete Unix ou via TCP. Os soquetes economizam overhead e geralmente fornecem latências minimamente melhores em um host. O TCP vale a pena se o servidor Web e o manipulador forem executados separadamente ou se eu quiser distribuir pools em vários nós. Escala gostaria. Para o TCP, defino timeouts, keep-alive e backlog de forma limpa para que não ocorram erros 502/504 durante picos de carga. Nas configurações do Apache, presto atenção ao número de proxy workers activos, no Nginx aos limites de ligações abertas. Com o LSAPI, o LiteSpeed lida com muitas coisas internamente, mas eu ainda verifico o backlog e as filas regularmente sob carga.

Eu monitorizo o comprimento da fila no estado do FPM, a utilização dos trabalhadores e a saturação da CPU. Uma fila alta com baixa utilização geralmente indica gargalos no front-end (por exemplo, muito poucos trabalhadores Nginx) ou Travões de E/S lá. Só quando sei qual é o ponto de estrangulamento é que aumento os processos filhos ou ajusto os parâmetros de rede.

Monitorização, métricas e resolução de problemas

Para a observação, baseio-me em Monitorização holísticaRegistos do servidor Web, estado do FPM, métricas do sistema (CPU, RAM, I/O), registos de aplicações e verificações sintéticas. Particularmente valioso é o FPMSlowlog, para detetar valores atípicos. Correlaciono as latências P95/P99 com picos de CPU, taxa de acerto de OPcache, número de processos em execução e latências de banco de dados. Se a latência P99 aumentar, primeiro verifico as filas e os tempos limite entre o proxy e o manipulador.

No caso de um incidente, trabalho de fora para dentro: 1) códigos de erro HTTP e tempo, 2) erros do servidor proxy/web, 3) filas de tratamento e estados de trabalho, 4) registos de aplicações, 5) sistemas backend (BD, cache, sistema de ficheiros). As causas frequentes de 502/504 são timeouts demasiado rigorosos, bloqueio de upstreams ou esgotado Capacidades da piscina. Contramedidas simples: timeouts realistas, limites claros e alertas que antes de de exaustão.

Sistemas de ficheiros, realpath e detalhes da OPcache

Os acessos a ficheiros têm um impacto maior na latência do que muitas pessoas esperam. Eu presto atenção à rapidez Caminhos de armazenamento para código e modelos. Nos sistemas de ficheiros de rede (por exemplo, NFS), os parâmetros realpath e OPcache são críticos. Um realpath_cache_size suficientemente grande e um ttl adequado evitam resoluções de caminhos permanentes. Na OPcache, dimensiono memory_consumption, interned_strings_buffer e o número de Tabelas de hash Defino validate_timestamps e revalidate_freq para corresponder ao fluxo de trabalho de implementação, de modo a que as alterações tenham efeito rapidamente, mas não desencadeiem verificações a cada segundo.

Para grandes bases de código, vale a pena Pré-carregamento para classes e funções centrais. Isso economiza o tempo de CPU dos trabalhadores FPM ou LSAPI no hot path. Eu só testo JIT onde há gargalos reais de CPU (muita lógica numérica). O JIT raramente traz vantagens para o CMS clássico; uma configuração limpa do OPcache e um caminho de E/S rápido são mais importantes.

Ligação à base de dados e à cache: evitar a latência

Muitos problemas de desempenho não têm origem no manipulador, mas sim no Bases de dados e caches. Monitorizo os tempos de execução das consultas, os conjuntos de ligações e os bloqueios. Conexões persistentes podem ajudar, mas elas vincular RAM nos trabalhadores. Por isso, dimensiono o pm.max_children de acordo com os limites de ligação da base de dados e controlo os timeouts. Para os acessos Redis/Memcached, a baixa latência da rede e os tempos limite também são cruciais. Utilizo o rastreio na aplicação para reconhecer e reduzir as consultas N+1 - isto reduz a carga no manipulador e no backend ao mesmo tempo.

Muitas vezes faz sentido num ambiente altamente competitivo, escrita desacoplar processos (filas, trabalhos assíncronos) e acessos de leitura ao cache. Isso mantém as solicitações de front-end curtas e reduz a variabilidade dos tempos de resposta.

Aspectos de contentor, chroot e SO

Qualquer pessoa que utilize FPM ou LSAPI em Container ganha flexibilidade com versões e limites. Limites corretos, um agendador de processos eficiente e cotas adequadas de CPU/memória são importantes. Cotas muito altas causam gagueira nas latências do P99. Em configurações clássicas, o chroot/jail ou o isolamento do utilizador através de namespaces ajuda a separar estritamente os acessos aos ficheiros. Eu mantenho as imagens enxutas para manter os tempos de arranque a frio curtos (por exemplo, após um lançamento) e pré-aquecer as piscinas antes do tráfego mudar.

Rotação de registos e Contrapressão-As estratégias são obrigatórias: os discos cheios ou o bloqueio dos gravadores de registos têm um efeito direto nos tempos de resposta. Eu também calibro as estratégias de swappiness, HugePages (quando apropriado) e NUMA em hosts com muitos núcleos para que os trabalhadores não sejam retardados por acessos de memória entre nós.

Unidades LSAPI e FPM em funcionamento

O LSAPI beneficia de processos estáveis e duradouros e de um envio eficiente de pedidos. Regulo o número máximo de pedidos por trabalhador para limitar os efeitos de fuga de memória e monitorizar os reinícios em funcionamento em direto. Com o FPM, escolho a pedido para sítios com tráfego irregular, dinâmico Defino o pm.max_requests de modo a que as fugas esporádicas ou a fragmentação não desempenhem um papel importante. Defino o request_slowlog_timeout suficientemente próximo para reconhecer atempadamente as verdadeiras falhas, mas não tão próximo que as operações administrativas complexas façam soar constantemente o alarme.

Para ambos os mundos, verifico o Vias de sinalização para recargas e definir caminhos de escalonamento se os trabalhadores não reiniciarem de forma limpa. Isso evita que uma implantação no meio do dia cause interrupções na plataforma.

Lista de controlo: Seleção e afinação na prática

  • Definir objetivo: máximo Compatibilidade (FPM) vs. latência mínima de cauda (LSAPI) vs. separação muito difícil (CGI).
  • Esclarecer o papel do servidor: Configuração de um host (socket Unix) ou níveis separados (TCP) - Definir tempos limite/backlog de forma adequada.
  • Pools por conta/site: UID/GID próprios, limites apertados de memória, pedidos e tempo; ativar o slowlog.
  • OPcache: dimensão suficiente, taxa de acerto elevada, estratégia de revalidação adequada à implantação; pré-carregamento, se necessário.
  • Armazenamento: caminho rápido para código/cache, dimensão da cache realpath, observar as caraterísticas especiais do NFS.
  • BD/Cache: Ligações e tempos limite consistentes com pm.max_children; eliminar consultas N+1.
  • Camada de cache: Combinar proxy reverso, cache de página e cache de aplicação; invalidar em vez de esvaziar cegamente.
  • Observabilidade: P95/P99, comprimento da fila, estados do trabalhador, taxa de acerto do OPcache, latências de E/S e backend num relance.
  • Lançamentos: Gracioso recarregamentos, aquecimento, implementações atómicas, invalidação selectiva da cache.
  • Planeamento da capacidade: reservas de rutura, sem overbooking; avaliar realisticamente os custos/benefícios das licenças LSAPI.

Brevemente resumida: a minha classificação

Para ambientes de alojamento mistos PHP-FPM o melhor equilíbrio entre desempenho, isolamento e compatibilidade. Nas pilhas LiteSpeed, o LSAPI traz vantagens mensuráveis em termos de latências finais e consumo de RAM. O CGI é adequado para uma separação rigorosa em casos de nicho, mas fica para trás em projectos dinâmicos. Inicialmente, confio no FPM com limites claros de pool, OPcache ativado e uma configuração de servidor Web limpa. Se espera muita concorrência, teste o LSAPI no LiteSpeed e depois tome uma decisão. Custo-benefício-decisão.

Artigos actuais