Configuração do servidor para PHP/Apache2/MySQL para 250.000 acessos por dia?

Configuração do servidor para PHP/Apache2/MySQL para 250.000 acessos por dia?

Alguém pode recomendar uma configuração ou, melhor ainda, indicar-me um estudo de caso completo para esta configuração da web?

Basicamente temos um site php recebendo cerca de 100.000 acessos por dia. Já está obtendo tempos limite de conexão, etc. ao tentar atender essa carga em um VPS, devido à capacidade da CPU atingida. Gostaria de especificar algo que permita escalar para cerca de 250.000 acessos por dia.

Atualmente o servidor é:

  • um VPS expansível de 1 GHz de núcleo único (de um Xeon dual core de 2,6 GHz)
  • 2 GB de RAM expansível (novamente, acho o expansível muito vago)
  • 32 MB por processo php, executando mecanismo de expressão (até onde eu sei) ou algo similarmente pesado
  • páginas gráficas com bastante uso de imagens
  • trabalho ocasional nos bastidores em algumas páginas, como xmlrpc para servidores de terceiros
  • Apache simples com modphp (portanto, arquivos estáticos como imagens também precisam de processos php completos - isso não pode ser alterado por enquanto)

Até agora, a CPU parece ser o principal gargalo, com alguns processos do Apache usando cerca de 30% da CPU durante as solicitações. Alguns outros processos do Apache parecem muito melhores com apenas 1% da CPU; Presumo que sejam solicitações de arquivos estáticos.

Então. Queremos sair do VPS para algum tipo de caixa dedicada ou virtual dedicada com desempenho não-burst (mensurável, garantido). Tem que ser capaz de lidar com o tráfego atual e pelo menos dobrar isso no futuro.

Alguma recomendação ou estudo que você possa me indicar?

Existe alguma ferramenta que possa fornecer uma especificação estimada do servidor com base em parâmetros como memória por processo Apache, porcentagem de solicitações dinâmicas, se o código PHP é um material CMS pesado ou um material leve do hello-world, etc?

Responder1

Duvido que existam estudos de caso úteis sobre este assunto, pois o desempenho sempre variará enormemente com base na complexidade da aplicação - a única maneira de chegar perto de um ajuste é medir e extrapolar.

Você não menciona o sistema operacional, mas eu configuraria uma série de monitores de desempenho que capturam threads, cargas de CPU, estatísticas de memória, dados de disco e rede, etc. A partir disso, você deve ser capaz de determinar o uso mínimo, médio e máximo de recursos para todos esses componentes com base na carga real vista - depois de ter essas estatísticas (mhz/10 mil usuários, mem/10 mil usuários, etc.), você deverá ser capaz de extrapole rapidamente o desempenho que você precisa. Certifique-se de planejar cerca de 20% de espaço adicional, mesmo quando estiver no pico de carga esperado.

Eu sei que é muito trabalho de planilha, mas é a única maneira de você se sentir confiante - bem, há sempre o método de 'jogar toneladas de hardware no problema', que também funciona, mas custa :)

Boa sorte e volte com alguns dados mais tarde se precisar de ajuda para entendê-los.

Responder2

Basta adicionar o nginx no modo proxy na frente do Apache e configurá-lo para o servidor de dados realmente estáticos sem tocar no Apache. Você sentirá um aumento instantâneo de velocidade.

Então eu mudaria o Apache2 para o modo pré-bifurcado com cerca de 4 a 16 filhos.

Trabalho em segundo plano, como conexões externas, realmente dói. Eu reescreveria esse código para tornar essas coisas assíncronas.

Finalmente, você pode estar sem largura de banda no nó mestre (ou seja, servidor que contém todos os VPSses). Pergunte à sua empresa de hospedagem se ela tem conexão de 1 Gbit em seu nó mestre e se for apenas 100 Mbit - você pode querer mudar de hospedagem.

informação relacionada