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

1

Alguém pode recomendar uma configuração ou, melhor ainda, apontar para um estudo de caso completo para essa configuração da Web?

Basicamente, temos um site php recebendo cerca de 100.000 acessos por dia. Ele já está obtendo tempos limite de conexão, etc., ao tentar veicular essa carga em um VPS, devido à capacidade da CPU. Eu gostaria de especificar algo que permita que ele seja dimensionado para cerca de 250.000 acessos por dia.

Atualmente, o servidor é:

  • um VPS single-core de 1 Ghz (a partir de um Xeon dual core de 2,6 GHz)
  • 2GB de RAM estourável (mais uma vez, acho muito vago)
  • 32 MB por processo php, executando o mecanismo de expressão (até onde eu sei) ou algo similarmente pesado
  • páginas gráficas com muita intensidade de imagem
  • trabalho ocasional de bastidores em algumas páginas, como xmlrpc para servidores de terceiros
  • apache simples com modphp (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 algum processo de apache usando cerca de 30% de CPU durante as solicitações. Alguns outros processos apache parecem muito melhores em apenas 1% da CPU; Eu suponho que estas são solicitações de arquivos estáticos.

Queremos nos afastar 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 tráfego de rede e pelo menos dobrar isso no futuro.

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

Existe alguma ferramenta em torno da qual você pode fornecer uma especificação de servidor estimada baseada em parâmetros como memória por processo do apache, porcentagem de solicitações que são dinâmicas, se o código PHP é pesado ou coisas leves de hello-world, etc?

    
por Lee B 17.01.2010 / 13:31

2 respostas

3

Eu duvido que haja estudos de caso úteis sobre este assunto, já que o desempenho sempre variará enormemente com base na complexidade do aplicativo - a única maneira de se aproximar de um ajuste é medir e extrapolar.

Você não menciona o SO, mas eu configurei uma série de monitores de desempenho capturando threads, cargas de cpu, estatísticas de memória, dados de disco e de rede, etc. também certifique-se de capturar o número de ocorrências com as quais está lidando. 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 - uma vez que você tem essas estatísticas (mhz / 10k-users, mem / 10k-users etc) você deve ser capaz de rapidamente extrapolar o desempenho que você precisa. Certifique-se de planejar cerca de 20% de espaço adicional, mesmo quando estiver com a carga máxima esperada.

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

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

    
por 17.01.2010 / 14:00
1

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

Então eu mudaria o apache2 para o modo pré-formatado com 4-16 childs.

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

Por fim, você pode estar sem largura de banda no nó mestre (ou seja, servidor que mantém todos os VPSses). Pergunte à empresa de hospedagem se eles têm conexão de 1Gbit em seu nó mestre e se é apenas 100Mbit - talvez você queira alterar a hospedagem.

    
por 16.02.2010 / 01:11