Quando é o momento certo para adicionar um servidor de banco de dados separado, adicionar mais servidores web?

5

Normalmente, os projetos da web começam pequenos, tudo está no único servidor. Mas se o site se tornar popular, um servidor não será suficiente. Então, como eu não tenho experiência alguma nisso, gostaria de ter uma idéia de:
1. que tipo de carga significa que preciso mover meu banco de dados MySQL para um servidor separado e como medir essa carga?
2. que tipo de carga significa que preciso adicionar outro servidor da Web e como medi-lo?
3. aproximadamente, quantos usuários um servidor pode servir?

Estou falando de um aplicativo PHP simples em um servidor LAMP como este:
    * CPU: Athlon 3800+
    Detalhes da CPU: 2 x 2.0 GHz
    * RAM: 1 GB de RAM
    * Discos Rígidos: 2 x 160 GB (Software RAID 1)

    
por z-boss 17.06.2009 / 14:07

5 respostas

3

tudo depende ... do tamanho do seu conjunto de dados, padrão de uso.

Avalie a experiência do usuário final. defina um tempo de carregamento de página aceitável, teste a cada 5-10 minutos, traça gráficos. tudo depende do que sua empresa pode tolerar e quando se torna inaceitável.

habilite o slow_query no mysql, provavelmente você não quer ter mais de 5-10 consultas por dia que demore mais de 10 segundos. ou talvez você tenha algum relato noturno e possa tolerar isso?

provavelmente você quer gerar algumas estatísticas - por exemplo, com munin com o uso da cpu, iostats, carga do sistema, tráfego de rede, número de processess http, número de threads mysql, tempo de geração de páginas e ver como isso muda durante o dia / semana. você pode identificar o horário de pico com isso e pode ver como, por exemplo, adicionar mais memória / ajuste, o mysql altera o tempo de carregamento da sua página.

no seu caso, média de carregamento > 2 ou 3 significa que o sistema está sobrecarregado [mas isso é altamente discutível]

veja aqui para ver algumas dicas.

    
por 17.06.2009 / 14:12
2

O momento de começar a planejar mais servidores e uma arquitetura escalável é quando você se senta e desenha suas especificações (você quer ter uma base de código com funcionalidade modular, então é fácil separar as coisas, mas pelo menos ter um "front-end da web" e um "back-end de banco de dados" é alguma modularidade de níveis).

Depois de ter isso em vigor e você estiver executando em um servidor (banco de dados e front-end), você pode monitorar quanto tempo as diferentes operações demoram e a carga na máquina. Uma vez que o carregamento começa a subir sobre "número de CPUs", você está definitivamente em "devemos dividir isso" -land. Se você salvou dados históricos, pode extrapolar a aparência das coisas no futuro e decidir adicionar mais capacidade por vez, onde a capacidade será aproximadamente a necessária.

Em uma máquina unix, a "média de carga" é (aproximadamente) o comprimento médio da fila de execução (ou seja, processos prontos para execução, mas aguardando um intervalo de tempo; geralmente NÃO dimensionados pelo número de CPUs fisicamente na caixa). Se isso for persistentemente maior que o número de CPUs que você possui, isso é pelo menos um indicador de que a caixa está sobrecarregada. Não é a única medida, mas como um guia rígido e rápido, não é tão ruim e o sistema calcula isso para você.

    
por 17.06.2009 / 14:46
2

Outra coisa para olhar além da carga é sua necessidade de 100% de tempo de atividade . Se você precisar que seu site permaneça ativo durante as reinicializações do servidor, precisará de alguma redundância / cluster .

Temos nossos servidores Web funcionando como Máquinas Virtuais, portanto, usamos apenas dois (cerca de 200 sites) para redundância e podemos aumentar os "recursos do servidor" se necessário para lidar com a carga, sem precisar introduzir um terceiro servidor web (até um ponto).

Se você precisa aumentar o desempenho, a coisa mais fácil é separar o seu MySQL em uma caixa separada. No entanto, isso também significa que seus sites ficarão abaixo do dobro (ou seja, eles ficarão inativos quando um dos servidores for reinicializado / falhar)

    
por 17.06.2009 / 15:35
0

Você atualiza quando o planejamento de capacidade informa que você tem cerca de três vezes o tempo de espera para um novo servidor antes que a infraestrutura atual acabe.

    
por 17.06.2009 / 14:14
0

Você também deve dar uma olhada no mod_proxy e mod_disk_cache a considerar para o seu planejamento. Colocado em uma partição separada com o aplicativo enviando os cabeçalhos corretos (Cache-Control etc) esta é uma maneira muito boa e fácil de melhorar o desempenho dos aplicativos no apache porque qualquer página armazenada em cache (e armazenável) pode ser servida como se fosse estática.

Não tente usar o mod_mem_cache porque ele tem um desempenho pior por motivos de compartilhamento de cache.

Reduziu a carga em cerca de 20-30% em um sistema de armazenamento em massa que estou executando. Apenas tome cuidado com os parâmetros mod_disk_cache porque eles podem aumentar drasticamente seus iostats se forem configurados errados.

    
por 17.06.2009 / 16:23