Eu sei que essas perguntas são difíceis de responder :) Mas quero ter uma ideia 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 (apache processando arquivos php), um servidor db mestre e um servidor db escravo.
Eu iria executar o memcached nos servidores de mídia e de aplicativos como um pool compartilhado, mas queria saber se seria caro (em termos de tempo e recursos) fazer isso? Obviamente, toda vez que uma chamada memcached é solicitada (do servidor de aplicativos), é necessário fazer 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 site pequena como essa, seria melhor aumentar a memória RAM no servidor de aplicativos e NÃO agrupar o memcached entre servidores? Ou a diferença é tão pequena que não vale a pena se preocupar?
Embora eu tenha usado o memcached como exemplo, preferiria que as respostas fossem mantidas bastante genéricas, pois o mesmo cenário poderia ser aplicado a outros serviços (como um banco de dados).
Responder1
Se for um site pequeno, acho que esse nível de otimização é um exagero.
Mas há uma maneira de descobrir com certeza:teste-o.
Nós usamosWCATno passado para responder a perguntas como esta no passado. É uma ótima ferramenta para ver o desempenho do site sob diversas cargas.JMeteré outra ótima ferramenta para algo assim.
Usando WCAT, por exemplo, acabamos decidindo obter um servidor Hyper-V separado para hospedar nossa VM de banco de dados separada de nossa VM de aplicativo da web (neste caso, Fogbugz). O teste mostrou que mesmo com um número baixo de usuários simultâneos, ter a VM do banco de dados na mesma máquina que a VM do aplicativo tornava o aplicativo inutilizável (a CPU era o gargalo).
Responder2
Preciso de algumas perguntas respondidas para melhor responder às suas.
- É um único site?
- Está usando recursos intensivos (programação pesada no servidor, streaming de vídeo, etc.)?
- Você está usando apenas vídeo, db e php/.net?
- Quão bem especificados são os servidores?
- Qual é a velocidade dos discos rígidos e eles estão em uma configuração de ataque?
- Quantos processadores?
- Quanto RAM?
- Você está executando placas de rede e switches de 100 MB ou 1000 GB?
- Qual é a sua velocidade de upstream?
- O seu sistema operacional está simplificado e otimizado?
Responder3
Informações insuficientes fornecem uma resposta com qualquer probabilidade de estar correta, e realmente executar alguns testes/benchmarks seria a única maneira de ter certeza de que você está obtendo a resposta certa.
Meu melhor palpite, com base no que você descreveu, é que o pool aumentaria a latência de uma solicitação individual, mas aumentaria a carga agregada com a qual você poderia lidar antes que as coisas parassem.
Mas quando digo que suspeito que isso possa aumentar a latência de uma solicitação individual, quero dizer uma quantidade entre uma fração de milissegundo e talvez algumas dezenas de milissegundos, dependendo da configuração da sua rede. Se o seu site estiver ocupado o suficiente, isso será superado 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 tiverem hardware aproximadamente igual, é muito provável que seu servidor de aplicativos receba uma grande quantidade de uso de CPU e a CPU do servidor de mídia fique bastante ociosa, o que significa que você pode realmente obter o melhor desempenho usando o memcached em apenas o servidor de mídia e não o servidor de aplicativos.
A única maneira de ter certeza sobre uma otimização é testando. Teste, benchmark, perfil, etc. Sem testar você nunca saberá se está melhorando ou piorando o desempenho. Execute testes ponta a ponta (em outras palavras, clientes da Web simulados fazendo todas as solicitações de arquivos que um cliente da Web real faria) com uma combinação realista de usuários (para obter a combinação certa de acertos e erros de cache), tanto para uso moderado cargas e cargas "acabamos de receber cortes". Automatize seu teste para que seja facilmente repetível. Teste com memcached em ambos/todos os servidores, apenas em um servidor, apenas no outro servidor, com mais RAM em um servidor que no outro, etc...