como fazer para escalar uma aplicação web?

6

Sou principalmente um desenvolvedor de aplicativos da Web e não sei muito sobre técnicas de dimensionamento / escalabilidade. Meu aplicativo é escrito em Python, usando o Django; uma configuração bastante normal.

Eu atualmente uso o Apache 2.2 para o meu servidor web, e o MySQL para o 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 em um determinado momento; por isso não tive problemas, mas agora, como adicionaremos mais usuários, teremos problemas de desempenho.

Então, minha pergunta é: como faço para redimensionar meu aplicativo da web? Meu plano atual é o seguinte:

  1. Agora tenho apenas um servidor vps em execução, apache + MySQL.
  2. Em seguida, pretendo adicionar outro servidor vps, para executar apenas o MySQL, portanto, terei um servidor da Web e um servidor de banco de dados.
  3. Em seguida, adicionarei o memcache ao servidor da Web para armazenar dados em cache, para descarregar um pouco do MySQL.
  4. Em seguida, outro servidor da web para veicular todo o conteúdo estático.
  5. Em seguida, um servidor VPS para balanceamento de carga (nginx / verniz), atrás dos quais seriam meus dois servidores web e, em seguida, db-server.

Isso soa como uma estratégia viável? Por favor me guie por aqui.

    
por phoenix24 16.06.2010 / 13:08

3 respostas

1

Você sabe onde está seu primeiro gargalo? Se não, como você expôs a ordem das coisas para fazer?

Dito isto, se você não fez nada terrivelmente 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 sua primeira coisa a fazer. Por exemplo, dependendo dos sistemas que você está usando, não pode haver diferença ou uma grande diferença entre usar um segundo disco no host atual ou mudar para um servidor totalmente separado. Você está rodando em VPSes, se você está indo para E / S de disco movendo-se 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.

    
por 16.06.2010 / 14:18
1

Eu recomendaria a leitura das Arquiteturas escalonáveis na Internet de Theo Schlossnagle. O livro descreve toda a teoria e prática de escalar aplicativos entre servidores, garantindo que não haja pontos únicos de falha, escalonamento de bancos de dados, etc.

Seu plano parece a primeira progressão de escalonamento. Geralmente, tudo começa em um servidor, depois você divide a Web e o banco de dados, depois adiciona um proxy reverso ou um balanceador de carga e executa vários servidores da Web, e assim por diante.

    
por 16.06.2010 / 16:26
1

Você não pode melhorar o que não mede. Primeiro você deve ver qual é o seu gargalo. Você pode usar em cima agora, e configurar algum tipo de monitoramento, se você não tiver já. Se tudo estiver funcionando bem, você pode gerar uma carga realista usando o JMeter.

Aqui está um pouco mais de perspectiva sobre a infraestrutura a ser construída em torno do seu aplicativo Django.

    
por 16.06.2010 / 18:47