Quais são as desvantagens de velocidade de usar vários servidores para servir um site?

3

Eu sei que essas perguntas são difíceis de responder :) Mas eu quero ter uma idéia do impacto da separação de serviços em servidores diferentes.

Especificamente, estou configurando um site que terá um servidor de mídia (apache servindo arquivos estáticos), um servidor de aplicativos (arquivos php de processamento do apache), um servidor db mestre e um servidor db escravo.

Eu ia executar o memcached nos servidores de mídia e de aplicativos como um pool compartilhado, mas queria saber se era caro (em termos de tempo e recursos) fazer isso? Obviamente, toda vez que uma chamada do memcached é solicitada (do servidor de aplicativos), ela precisa estabelecer uma conexão tcp com o servidor de mídia, descobrir onde estão os resultados e depois retorná-los.

Para uma configuração de website pequena como essa, seria melhor aumentar o desempenho do RAM no servidor de aplicativos e NÃO agrupar o memcached nos servidores? Ou a diferença é tão pequena que não vale a pena se preocupar?

Mesmo que eu usei memcached como exemplo, eu preferiria que as respostas fossem mantidas razoavelmente genéricas, já que o mesmo cenário poderia ser aplicado a outros serviços (como um banco de dados).

    
por ae. 12.07.2009 / 16:43

3 respostas

7

Se for um website pequeno, acho que esse nível de otimização é exagerado.

Mas há uma maneira de descobrir com certeza: testar .

Já usamos WCAT no passado para responder perguntas como esta no passado. É uma ótima ferramenta para ver como o site funcionará sob várias cargas. O JMeter é outra ótima ferramenta para algo assim.

Usando o WCAT, por exemplo, acabamos decidindo obter um servidor Hyper-V separado para hospedar nossa MV de banco de dados separada de nossa VM de aplicativo da Web (nesse caso, o Fogbugz). O teste mostrou que, mesmo com um número baixo de usuários simultâneos, ter a VM de banco de dados na mesma máquina que a VM de aplicativo tornava o aplicativo inutilizável (a CPU era o gargalo).

    
por 12.07.2009 / 17:34
2

Precisa de algumas perguntas respondidas para melhor responder às suas.

  • É um site único?
  • É usando recursos intensivos (programação pesada do lado do servidor, streaming de vídeo, etc)?
  • Você está apenas usando video, db e php / .net?
  • Quão bem especificados são os servidores?
  • Que velocidade são os discos rígidos e eles estão em uma configuração de raid?
  • Quantos processadores?
  • Quanta memória RAM?
  • Você está executando nics e switches de 100mb ou 1000gb?
  • Qual é a sua velocidade upstream?
  • O seu sistema operacional é otimizado e otimizado?
por 12.07.2009 / 17:58
0

Informações insuficientes não fornecem uma resposta com qualquer probabilidade de serem corretas e, na verdade, a execução de alguns testes / comparações de mercado seria a única maneira de ter certeza de que você está obtendo a resposta certa.

Meu melhor palpite a partir do que você descreveu é que o pool aumentaria a latência de uma solicitação individual, mas aumentaria a carga agregada que você poderia manipular antes que as coisas se esbarrassem.

Mas quando afirmo que suspeito que possa aumentar a latência de um pedido individual, refiro-me a uma quantia entre uma fracção de milissegundos e talvez algumas dezenas de milissegundos, dependendo da configuração da sua rede. Se o seu site estiver ocupado o suficiente, isso será superado em muito pelas vantagens de velocidade de fazer menos chamadas de banco de dados com o dobro de cache. Se o servidor de mídia e o servidor de aplicativos forem aproximadamente iguais, é muito provável que o servidor de aplicativos receba uma alta quantidade de CPU e a CPU do servidor de mídia fique razoavelmente ociosa, o que significa que você realmente obterá o melhor desempenho usando memcached o servidor de mídia e não o servidor de aplicativos.

A única maneira de ter certeza sobre uma otimização é testar. Teste, benchmark, perfil, etc. Sem testes você nunca saberá se está melhorando ou piorando o desempenho. Execute testes de ponta a ponta (em outras palavras, clientes web simulados fazendo todos os pedidos de arquivos de um cliente Web real) com uma mistura realista de usuários (para obter a mistura certa de acertos e erros de cache), ambos para moderados cargas e cargas "acabamos de receber slashdotted". Automatize seu teste para que seja facilmente repetível. Teste com memcached em ambos / todos os servidores, somente em um servidor, somente no outro servidor, com mais RAM em um servidor que o outro, etc ...

    
por 12.07.2009 / 19:19