Separando sua aplicação do Banco de Dados com instâncias cloud

Instância cloud
Imagem ilustrativa: Separando o banco de dados e aplicação em instâncias cloud  – Freepik

Há algum tempo atrás nós trouxemos para você uma forma avançada de se separar responsabilidades do sistema através do Cluster de banco de dados. Em resumo, esta arquitetura separava seu projeto em instâncias cloud. A ideia é criar um grupo de banco de dados com responsabilidades semelhantes (leitura e escrita) ou não (Só leitura, só escrita) e através de um load balancer podemos balancear a carga de processos em cada servidor.

Hoje explicarei de uma forma mais prática, uma arquitetura que pode encaixar melhor em projetos médios. São comuns exemplos, os mais diversos blogs e lojas virtuais que, apesar de não serem uma americanas, um submarino ou um globo.com, começaram a enfrentar problemas pelo alto fluxo de consultas nos bancos de dados. Estes por sua vez estão trazendo demora ou instabilidade na aplicação web.

Quando fazer a separação em instâncias cloud

Reuni algumas perguntas que você deve se fazer antes de sair contratando ou separando novas instâncias cloud. Afinal, a ideia é otimizar seu sistema mas, não sair separando tudo por mero luxo certo.

  1. Sua aplicação está mais lenta que o normal?
  2. Ela está sofrendo com picos de instabilidade ou até mesmo saindo do ar em determinados momentos do dia?
  3. Durante estes picos e estas demoras, os processos envolvidos são relacionados a uma consulta no banco, ou em salvar algum dado neste?
  4. Ao executar o comando top em seu bash, as estatísticas de uso de recursos estão bem altas e o processo relacionado ao banco de dados está entre os maiores?

Você deve ter percebido que se seu projeto está nesta situação é melhor tomar uma atitude. Então tendo tudo analisado vamos a parte prática.

Mão na massa! Colocando meu Banco de dados em outra instância cloud

Para isto, utilizarei o painel do DialCloud+. Com ele você conseguirá configurar cada instância com os recursos necessários a cada projeto.

Para ilustração deixo este esquema de como funcionará este exemplo de arquitetura. Basicamente estamos deixando seu banco dados dedicado em uma instância com seus recursos próprios.

Banco de dados dedicado em uma instância cloud
Arquitetura com banco de dados dedicado

Com esta imagem em mente, podemos seguir ;).

Abaixo podemos ver que toda a aplicação se encontra em apenas uma instância. Nesta instância temos instalados o SO, o apache, o MySQL, PHP e entre diversas outras aplicações. O caso é que, como citado acima, eu identifiquei que meu banco de dados começou a consumir grande parte da minha memória e acaba por utilizar minhas 4 vCPUs disponíveis o que deixa todo o meu sistema em cheque.

 

instâncias cloud
Tela de instâncias do DialCloud +

É claro que neste exemplo terei de optar por aumentar um pouco meus recursos. Mas, simplesmente aumentá-los não seria suficiente já que isto não evita que meu banco de dados, em um momento de desespero, acabe por utilizar 6vCPUs. Por isto, a ideia aqui é pegar este banco de dados e migrar ele para outro servidor.

Para que seu sistema não fique fora durante todo o tempo da migração e para minimizar todo e qualquer impacto, vamos pegar os novos recursos e montar uma instância de banco de dados mínima. Esta estrutura servirá de base para configurarmos o que virá a ser nosso servidor final.

Nova instância
Tela de nova instância do DialCloud +

Como pode ver montei uma pequena instância com os recursos mínimos para que eu pudesse configurar meu novo servidor de banco de dados.

Migrando meu banco de dados

E ai vem a grande dica! Como agora tenho um servidor que será responsável apenas por receber e responder consultas de banco, posso simplesmente ignorar a instalação de vários módulos e aplicações de servidor que acabam por consumir um pouco do meu processamento e instalar apenas por exemplo o MySQL. Menos recurso para aplicações, mais recurso para o banco.
Ao terminar a instalação da nova instância eu preciso exportar o banco que está em produção e então importar no servidor novo. Apesar de rápido, este é o momento que exige maior atenção, pois terei que colocar meu serviço em manutenção momentânea para que não perca nenhum dado no meio do processo. Afinal enquanto faço isto, meus usuários estariam utilizando meu app.

Outra dica é não fazer isto em um dia ou horário de pico de acesso, assim você terá mais tranquilidade para fazer o processo.

Agora eu preciso fazer minha aplicação comunicar com este novo banco de dados, mas não se preocupe. Com a criação da nova instância minha tela de network mostra uma nova rede interna que foi criada entre estas 2 instâncias cloud. Basta eu pegar o ip interno referente ao servidor de banco de dados e colocar no host das configurações de banco de dados da minha aplicação.

Tela de rede interna no DialCloud +
Tela de rede interna no DialCloud +

Para garantir mais proteção aos meus dados, vou configurar o acesso do ip externo apenas para a instância de aplicação. Faço isso configurando o Port forwarding e no caso do serviço do DialCloud+ libero o acesso externo no firewall (Esta é uma proteção a mais disponibilizada na DialHost gratuitamente) através do Outbound Firewall.

Tela de Port Forwarding no DialCloud +
Tela de Port Forwarding no DialCloud +

Realocando recursos

Tá mas, meu processo que exigia mais recursos tem bem menos recursos. Bem, como eu disse antes, esse era um servidor base para a migração. Agora é só ir nas configurações das instâncias e escalonar os recursos. Assim, você poderá destinar mais para seu banco de dados e menos para sua aplicação.

Concluindo

Esta arquitetura possui uma distribuição mais simples se comparada com a de cluster de dados. Por ser mais simples, ela pode ser mais comum para o dia a dia de diversos projetos. Ainda assim, ela é uma ótima opção pois propicia:

  • Menor custo com recursos de máquina.
  • Melhor distribuição das responsabilidades do servidor o que falicita seu escalonamento.
  • Maior segurança dos dados, já que seu banco de dados não terá acesso por outro lugar que não sua aplicação.
Tenha controle e flexibilidade nos seus recursos com DialCloud +. Servidores em cloud com load balancing, VPN e todo o controle de rede que você precisa. Saiba Mais.