
Sou principalmente um desenvolvedor de aplicativos da Web e não sei muito sobre técnicas de escalabilidade/escalabilidade. Minha aplicação é escrita em Python, usando Django; uma configuração bastante padrão.
Atualmente uso Apache 2.2 para meu servidor web e MySQL para meu servidor de banco de dados; ambos rodando no mesmo VPS.
Até agora, era basicamente um protótipo e apenas 15 a 30 usuários simultâneos a qualquer momento; então não tive problemas, mas agora, como adicionaremos mais usuários, teremos problemas de desempenho.
Então, minha pergunta é como faço para dimensionar meu aplicativo da web? Meu plano atual é o seguinte:
- Agora tenho apenas um servidor vps em execução, apache + MySQL.
- Em seguida, pretendo adicionar outro servidor vps, para rodar apenas MySQL, então terei um servidor web e um servidor de banco de dados.
- A seguir, adicionarei o memcache ao servidor web para armazenar dados em cache, para aliviar um pouco a carga do MySQL.
- A seguir, outro servidor web para servir todo o conteúdo estático.
- Em seguida, um servidor VPS para balanceamento de carga (nginx/varnish) atrás do qual estariam meus dois servidores web e depois o servidor db.
Isso soa como uma estratégia viável? Por favor, me guie por aqui.
Responder1
Você sabe onde está o seu primeiro gargalo? Se não, como você definiu a ordem das coisas a fazer?
Dito isto, se você não fez nada de errado em seu aplicativo, o primeiro limite que você provavelmente atingirá será a E/S de disco causada pelo banco de dados e sua estratégia provavelmente será uma boa escolha.
Mover o banco de dados para outro disco físico deve ajudar muito e ser a primeira coisa a fazer. Por exemplo, dependendo dos sistemas que você está usando, pode não haver diferença ou pode haver uma grande diferença entre usar um segundo disco no host atual ou mudar para um servidor totalmente separado. Você está executando em VPSes, se você estiver vinculado à E/S de disco, mudar para um segundo VPS provavelmente não ajudará muito se usar o mesmo armazenamento (mesmo disco ou mesmo SAN ou qualquer outro) - mas este último é um problema que deve ser resolvido pelo seu provedor de vps.
Responder2
Eu recomendo a leituraArquiteturas de Internet escaláveispor Theo Schlossnagle. O livro descreve toda a teoria e prática de dimensionamento de aplicativos entre servidores, garantindo que não haja pontos únicos de falha, dimensionamento de bancos de dados, etc.
Porém, seu plano parece a primeira progressão de escalonamento. Normalmente, tudo começa em um servidor, então você divide a web e o banco de dados, depois adiciona um proxy reverso ou balanceador de carga e executa vários servidores web e assim por diante.
Responder3
Você não pode melhorar o que não mede. Primeiro você deve ver qual é o seu gargalo. Você pode usar o atop agora e configurar algum tipo de monitoramento, caso ainda não o tenha feito. Se tudo estiver funcionando bem, você poderá gerar uma carga realista usando JMeter.