Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Curso de AWS

Olá, acabo de concluir o curso e gostaria de parabenizá-los pela didática e conteúdo, mesmo assim esperava mais por uma carga horária de 12h, mas compreendo que o curso é apenas uma introdução, então vou ficar torcendo para que vocês lancem uma versão mais completa.

Administro um site (www.salaovip.com.br) em uma instancia small rodando php e banco de dados mysql, e na maior parte do tempo o site roda sem problemas, porem em alguns dias e horários com muito movimento ele fica lento e já chegou a ficar alguns minutos fora do ar... em compensação de madrugada sinto que perdemos dinheiro deixando uma máquina small ligada, com praticamente nenhum movimento, sendo que uma micro já daria conta.

Qual seria a melhor opção para esse caso?

Utilizar varias instancias micro com o load balance?

E mesmo com o load balance configurado, quando o site tiver baixo movimento, existe uma forma de desligar(ou religar) as máquinas que não estão sendo utilizadas de forma automática?

Na utilização de mais de uma instancia para a mesma aplicação, eu preciso manter os arquivos do site em todas as máquinas para que ele execute as operações corretamente?

Fora isso, o banco de dados irá ser o mesmo para todas as instancias? como configurar isso?

Eu sei que são muitas as dúvidas mas ficarei grato se conseguirem me ajudar. Obrigado!

2 respostas

Oi Victor. Obrigado pelo comentário sobre o conteúdo do curso, nos ajuda muito a melhorar. Como disse ele é realmente introdutório, mas estamos considerando a criação de novos módulos.

Quanto ao problema da sobrecarga em alguns períodos e ociosidade na madrugada, seu maior aliado será o serviço de auto scaling [1] (na verdade uma combinação de load balancer, cloud watch e auto scaling). Dessa forma você pode configurar a quantidade mínima e máxima de instâncias que ele poderá criar conforme a máquina vai sendo sobrecarregada.

Porém ter essa flexibilidade de vários pontos diferente acessando o seu banco de dados pode ser um problema. Eu recomendo que, se valer a pena no orçamento, utilize o serviço de banco de dados da própria Amazon [2], pois ele já foi desenvolvido pensando nesse cenário, como ele é um "módulo desacoplado" das instâncias elásticas você não vai precisar ter esse tipo de preocupação (a Amazon se preocupa por você e tudo funciona), pelo contrário você vai ter que procurar ou pensar em uma solução alternativa pra isso funcionar.

Quanto aos arquivos do site, você precisa sim manter os arquivos distribuidos entre as imagens que você criar. Se for o caso você pode usar o S3 [3] pra disponibilizar esses arquivos.

Existem alguns serviços e scripts prontos pra schedular o horario de ligar e desligar as maquinas, já ouvi falar do Cloud8 [4] e tem alguns scripts prontos na internet. Além disso se você quiser brincar, pode usar a API [5] da linguagem de maior dominio pra escrever esse script.

Uma sugestão minha é analisar o cloud watch [6] das suas instâncias ec2 e se sua app estiver recebendo picos de processamento (picos, não sobrecarga constante) mudar ela pra micro. Como falamos em um ponto do curso a micro chega a dobrar sua capacidade pra conseguir atender esses picos.

Se for seu caso, acho que só isso já resolveria o problema (sem precisar desligar, ligar, multiplicar, auto escalar, se preocupar com a estrutura do banco de dados e distribuição de arquivos). A resposta simples tende a ser a certa.

[1] http://aws.amazon.com/autoscaling/

[2] http://aws.amazon.com/pt/rds/

[3] http://aws.amazon.com/s3/

[4] https://www.cloud8.com.br/

[5] http://aws.amazon.com/developers/getting-started/

[6] http://aws.amazon.com/cloudwatch/

Fez sentido? Qualquer dúvida estamos a disposição e obrigado mais uma vez pelo feedback.

solução!

Bom dia Victor, tudo bem?

Sua pergunta é bem válida. Primeiro, imagino que seu banco mysql esteja na mesma máquina que a instalação mysql. Então se você simplesmente duplicar a máquina terá duas máquinas rodando php e duas rodando dois bancos distintos. Uma acessa um, a outra acessa o outro, que não é o que você quer.

Você quer um único banco, certo? Então em uma das máquinas você terá o php instalado e o mysql.

Na outra máquina você instalará somente o php mas mudará a string de conexão para o banco de localhost para o ip interno da amazon da outra máquina. Com isso a nova máquina se conecta no mesmo mysql de antes.

Note que isso resolve o problema de seu gargalo se ele for no php - muito processamento no servidor php. Se o seu gargalo for que as queries estão demorando muito e isso está matando suas requisições, você provavelmente vai querer duplicar o banco com uma arquitetura tipo master-slave, por exemplo.

Na maior parte dos casos quando uma aplicação começa a ficar lenta o problema é no processamento do servidor - mas pode ser problema das queries - então é legal averiguar.

Att