Escalando um servidor apache

2

Eu tenho um servidor Ubuntu rodando o apache2, que eu espero ser atingido por cerca de 500-1000 usuários (concorentes) por um tempo limitado. O servidor serve uma mistura de páginas php personalizadas (bem leves) conectadas a um banco de dados postgresql (em torno de 20 Mb de tamanho) e conteúdo estático. O hardware é estável e bastante robusto:

  • Intel Xeon E5420 a 2,5 GHz
  • 12 GB de RAM

Durante os rushes anteriores neste servidor, aumentei o ServerLimit, o MaxClients para os módulos MPM e diminuí o Timeout e KeepAliveTimeout. Isso funcionou, mas foi lento e tenho a sensação de que mais pode ser feito. Como você sugeriria configurar o servidor Apache para lidar com esse tipo de carga?

    
por pehrs 31.05.2010 / 10:59

2 respostas

3

Seu gargalo nesse cenário será o PHP e o que ele está fazendo com o banco de dados. Se você está abrindo uma nova conexão com cada chamada, então é mais do que provável que você acesse as paredes de E / S no acesso ao disco mais do que qualquer outra coisa. Sua melhor aposta é ter o banco de dados e conteúdo estático em um disco RAM e confirmar as alterações necessárias para o banco de dados no disco. Além disso, mantenha um mecanismo de cache de consulta eficiente usando uma consulta de hash rápida dedicada à RAM no PHP, para que você não sobrecarregue o postgresql com ciclos de processamento desnecessários relacionados às pesquisas de cache de consulta. Embora o postgresql seja provavelmente mais eficiente no cache de consultas do que o seu próprio código, não é tão rápido quanto nunca precisar estar conectado em primeiro lugar.

    
por 31.05.2010 / 14:52
-3

Seu servidor deve ser capaz de lidar com as coisas facilmente. Apenas algumas notas:

  1. O uso do SSL aumentará seus requisitos computacionais. Então, use HTTP simples.
  2. O uso do prefork MPM aumentará seus requisitos de memória. Então, use trabalhador MPM.
  3. Usar mais simultaneidade com mais núcleos melhorará o desempenho.
  4. Dedique mais memória RAM ao seu banco de dados PostgreSQL.

Estas são apenas diretrizes genéricas.

    
por 31.05.2010 / 12:18