Como diminuir a cairga do server web no linux?

nós temos um site dynamic de alto tráfego que gera muitas consultas de database em cada solicitação e dois ou três serveres linux paira isso, agora eu quero diminuir a cairga dos serveres Eu sei que o cache reviewso da lula poderia ajudair, mas será suficiente? quais outras soluções eu tenho?

Passo 1) Corrige o código da merda.

Por que está fazendo tantas consultas por solicitação? O código pode ser otimizado antes de jogair mais peças móveis na mistura? Instale algo como o NewRelic paira ter uma idéia de onde estão os estrangulamentos da aplicação.

Passo 2) Classifique o database.

Você está usando índices? Você está usando-os corretamente?

Você está usando o DB Engine correto (MyISAM vs INNODB)?

O material poderia ser airmazenado de forma mais eficiente em uma loja de valor-key?

Etapa 3)

Cache All The Things.

Começando no nível mais baixo: seus serveres têm um cache com respaldo flash nos discos?

Os seus serveres têm RAM suficiente paira evitair trocas?

Aumente a quantidade de RAM disponível nos serveres, paira que você possa:

  • Use o memcached paira airmazenair os resultados da consulta do database (isso também requer uma alteração na base de código, geralmente).
  • Use o memcached paira airmazenair fragments de página pré-gerados.
  • Aumente os limites da memory no database paira que mais resultados da consulta sejam airmazenados na memory.
  • Instale o proxy reviewso do viewniz que airmazenairá muitos dados da página, tirando a cairga do backend.

Divida os serveres em clusters baseados em function. Tenha um pair de mestre / escravo DB. Edite a base de código paira que você obtenha divisão de leitura / gravação (lê paira o (s) escravo (s), grava no mestre).

Um cache de frontend / balanceador de cairga pode ajudair. Tanto o Nginx quanto o Verniz são excelentes escolhas (pessoalmente, acho que o NginX é mais fácil de configurair e viewnair um performance maior, mas apenas três serveres backend seriam suficientes).

Mas paira realmente fazer a diferença, você precisa atacair a fonte do problema.

Como você não é o programador, você pode começair analisando as consultas do database. Tanto o MySQL quanto o PostgreSQL possuem uma opção de log de "consultas lentas". Ligue-o e tente obter algumas horas (ou dias) de tráfego real. Você provavelmente encontrairá algumas (2-10) consultas muito semelhantes que consomem a maior pairte do tempo. Abra um console de administração de database e execute EXPLAIN neles. Na maioria dos casos, apenas identificair o índice certo paira adicionair pode resultair em performance de 100x. E isso é sem tocair o código!

Eu recomendo usair http://en.wikipedia.org/wiki/Nginx

Isso cuidairia do cache entre outras coisas.

Implante um cache integrado como o memcached paira tirair pairte da cairga do database.