Cloud computing para grandes sites em WordPress

Cloud para grandes sites em WordPress

Cloud para grandes sites em WordPress

Estamos em uma era que não podemos negar o poder do WordPress em administrar sites. Muito além dos antigos blogs que víamos sempre por aí, grandes sites, portais e até mesmos lojas
virtuais já podem, e estão utilizando desta plataforma para se estabelecerem online. É o caso de sites como o do ministério da cultura, USP (Universidade de São Paulo) e o próprio iMasters.

Estes tipos de sites tem em comum alguns pontos que não permitem mais funcionar normalmente dentro de uma estrutura compartilhada. A utilização de plugins para controle
e segurança do WordPress e o nível de personalização do próprio WordPress para atender as demandas destes tipos de projetos podem ser um fator a se analisar. Mas sem dúvida o
fluxo de processos, acessos e atualizações de banco de dados que superam, e muito, qualquer estrutura fornecida por planos comuns de hospedagem são o maior fator a se considerar aqui.

Estrutura Dedicada do cloud

Ao contrário das hospedagens compartilhadas uma estrutura em cloud computing permite a disponibilização de recursos dedicados ao projeto. Isto quer dizer, mais segurança, estabilidade e desempenho para o projeto que não será influenciado por outros sites que estão no mesmo servidor.

Nesta estrutura é possível pensar de forma escalada os recursos que vão atender a esta alta demanda do projeto. Sejam recursos para o fluxo normal de utilização do site ou para um momento de pico o cloud computing permite aos administradores de desenvolvedores se precaverem contra ultrapassar o uso de recursos como, memória, espaço em disco e VCPUs conforme o crescimento do uso destes sites.

O patamar de informações que circulam neste tipo de projeto precisa estar muito bem alinhado com os recursos aplicados ao servidor que o sustenta. Um erro aqui pode ser o fim da estabilidade do site.

Separação de banco de dados

O WordPress, como um bom CMS, realiza o controle de informações dentro de banco de dados. Assim, pode não parecer tão claro mas, se preocupar com o acesso, estabilidade e cacheamento desta base de dados é o fator que deve estar no top 1 das preocupações do seu projeto.

A Notícia boa é que com uma estrutura em cloud é possível criar um cluster de banco de dados. Este cluster é responsável por separar em diferentes instâncias sua aplicação web (que vai possuir acesso dos seus usuário) e a escrita/leitura dos dados no banco de dados que serão feitas pela aplicação. Em um post feito no Blog da DialHost expliquei sobre o funcionamento do cluster de banco de dados e como esta arquitetura balanceia a quantidade de requisições ao banco.

Balanceando as cargas de acesso

Do lado da aplicação é possível balancear os processos. Com o balanço, sua rede direcionará os acessos ao WordPress para instâncias separadas de forma uniforme. Por fim você otimizará a utilização dos recursos e evitará sobrecargas que poderiam ocorrer em uma instância única.

Cacheamento dos dados em nível de servidor com Redis

O Redis é um servidor de estruturas de dados que pode ser usado como um servidor de banco de dados. Ele também pode ser utilizado em paralelo com o MySQL para aumentar o seu desempenho. Ele é recomendado para ser configurado como cache. Desta forma ele é capaz de aliviar o consumo que as queries de banco de dados usam para renderizar a página em WordPress.

Como resultado teremos um WordPress renderizado muito mais rápido, o consumo bem menor dos bancos de dados e cache persistente e ajustável.

Como podem ver, este artigo não foca mais naquelas simples soluções baseadas em otimizações feitas por plugins do WordPress que funcionam em diversos blogs menores. Aqui estamos falando  em soluções para
grandes sites que tem acessos e processos bem mais robustos. Nestes casos ter o controle total das requisições, rede, banco de dados são de fato os maiores responsáveis pela estabilidade do site.

Para o próximo artigo, vou escrever sobre a configuração do Redis para manter o cacheamento das informações do WordPress. Então até lá.

Felipe Moraes
Felipe Moraes

Gerente de desenvolvimento na DialHost, Designer Gráfico formado pela Universidade FUMEC, Minas Gerais e Pós graduando em Branding pelo Centro Universitário UNA, possuo interesse em design de interação e interfaces. Trabalha com programação e criação para web, desde 2006. Apreciador de Bacon, Pudim e music Tag.

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.

 

DialHost
DialHost

Contamos com nosso DataCenter no Brasil de alta qualidade, estabilidade e confiança para hospedar seu site. Utilize poderosas ferramentas para otimizar o uso do seu serviço e seja sempre atendido de forma rápida e clara pelo nosso atendimento 24h.

É possível ter segurança em Servidores Cloud?

segurança em Cloud computing

Imagem ilustrativa sobre segurança em Cloud computing – fonte Freepik

Antes de dar minha opinião, explicarei algumas dicas para serem aplicadas em seu servidor cloud. Em seguida demonstrarei algumas funcionalidades utilizando a ferramenta da DialHost que auxilia na configuração de algumas regras que melhoram a segurança.

Primeiramente temos sempre que manter uma atenção especial na segurança de nossos servidores. Pois há uma evolução constante dos tipos de ataque e defesa.
As tecnologias evoluíram. E com elas, os hackers que cada vez mais ágeis e habilidosos, encontram brechas para burlar sistemas de gerenciamento e informações sigilosas de empresas e instituições.

Mas para que você tenha mais garantias contra estes tipos de ataques seguem algumas dicas para ajudar na proteção do seu servidor

Mantenha atualizado os pacotes e kernel do servidor

Ao deixar seu kernel desatualizado você perde todas as atualizações de segurança, melhorias de estabilidade, atualizações de drivers e funcões que foram desenvolvidas nas novas versões.

Instale um detector de brute force

O ataque brute force é uma técnica hacker que costuma utilizar um dicionário de usuários e senhas para realizar o acesso a algum sistema. Através destas combinações ele tenta constantemente realizar acessos até que um destes dados sejam validados e finalmente o sistema seja aberto.

O detector de brute force, por outro lado fica analisando tentativas sucessivas de acessos vindas de um mesmo IP. Através desta repetição ele bloqueia o acesso do IP malicioso e assim, mata o processo iniciado pelo robô hacker. Um exemplo de sistema detector de brute force é o Fail2Ban.

Desabilite o acesso Root via SSH

Sabemos que o acesso root permite mais facilidades para o usuário avançado, mas como já dizia o tio Ben “Grandes poderes trazem grandes responsabilidades”. Por isso, desabilite este usuário via SSH e crie usuários apenas com as permissões necessárias para o seu projeto e manutenção do mesmo.

root

Crie chaves para o acesso via SSH

Ao fazer um acesso via SSH utilizando chaves de acesso, você garante que seu acesso terá um conjunto longo e complexo de caracteres. Por outro lado o acesso através apenas de senha tendem a ser previsíveis ou fáceis para ataques do tipo brute force.

Mude a porta de acesso do SSH

A alteração da porta de acesso do ssh é importante para retardar a atuação de portscaner que buscam primeiramente as portas default dos serviços como “22,23,53,80,443,21”. Alterando sua porta de acesso estes scaners vão cair em uma porta fechada.

Para realizar esta alteração recomendo que utilize o port forwarding assim seu acesso interno se mantém na porta original, mas seu acesso público pode ser redirecionado para outra porta como 7021, por exemplo.

Busque informações de segurança para os serviços ativados

É normal que serviços famosos possuam em seus próprios cores soluções de segurança ou mesmo pacotes que auxiliam na segurança. Serviços como Apache, Nginx entre outros vão te disponibilizar constantemente novas opções de segurança. Mas, é importante que quem esteja gerenciando suas instâncias fique sempre informado sobre novas soluções. Assim, você pode ficar mais tranquilo contra ataques hackers.

Instale um Firewall

Na DialHost, por exemplo, ao contratar um plano DialCloud+, é disponibilizada uma ferramenta para configuração do Firewall. Assim, você pode garantir mais segurança nas suas instâncias uma forma simples.

Outra análise que vale informar é que as instâncias estão protegidas em um rede totalmente privada. Outros clientes não tem nenhuma comunicação com suas instâncias criadas.

Veja como é simples a criação das regras

Tela do sistema DialCloud - Adicionando regra de segurança do Firewall

Tela do sistema DialCloud – Adicionando regra de Firewall

No campo IP, será exibido o seu IP Público para os acessos.
CDIR: Você informar um range ou único IP permitido para acessar a porta.
Start Port: O inicio de uma série de portas ou a definição de uma única porta
End Port: A última porta a ser liberada ou a mesma informada para o início.
Protocolo: Define qual tipo de protocolo como TCP, UDP ou ICMP.

Após adicionar as regras desejadas, o resultado ficará como abaixo.
Simples de ser visualizado, configurado e reconfigurado.

Tela do sistema DialCloud - inbound Firewall

Tela do sistema DialCloud – inbound Firewall

Concluindo

Sobre a pergunta proposta no inicio, na minha opinião não podemos afirmar que estamos 100% protegidos contra os invasores. Este é um trabalho onde temos que estar atentos e atualizados às práticas mais atuais para nos proteger.

Os invasores sempre vão preferir servidores desatualizados e que possuam mais brechas para a invasão. Dificultar as invasões com o Firewall e outras ferramentas de proteção é uma atividade contínua dos administradores dos servidores.

Referências

http://www.makeuseof.com/tag/5-reasons-update-kernel-linux/
http://www.liquidweb.com/kb/what-is-brute-force-detection-bfd/
https://www.vivaolinux.com.br/dica/Alterando-a-porta-do-servico-SSH

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.

 

Márcio Rubens
Márcio Rubens

Sou Analista de TI na DialHost, pós-graduado em Gestão de Segurança da Informação pela PUC-MG e graduado em Gestão da Tecnologia da Informação pela UNI-BH.

Ambiente de testes e desenvolvimento na nuvem

Ambiente de testes e desenvolvimento

Ilustração – Ambiente de testes e desenvolvimento

Toda equipe de desenvolvimento precisa da segurança de um ambiente de desenvolvimento para programar novas aplicações ou atualizações nos serviços. Mesmo quem tem pouca experiência em programação já deve saber da instabilidade que uma aplicação passa durante seu período de desenvolvimento. E ainda que tudo já esteja correto, ao ver dos desenvolvedores, um ambiente de testes  deve simular o produto que irá para produção.

Ambiente de desenvolvimento

O momento de desenvolvimento de um projeto é aquele período liberado para erros. E acredite, por melhor que seja o desenvolvedor envolvido no projeto uma coisa é certa, erros ocorrerão enquanto ele está programando uma classe ou integrando alguma api e etc.

E são diversos os erros: erros lógicos, de sintaxe, exceptions, sem contar em dados que podem ser apagados por uma simples linha de comando mal executada. Agora imagina se todos esses problemas ocorressem em pleno ambiente de produção, com os clientes acessando a todo tempo, enquanto você está descabelando para resolver o problema em uma maratona sem fim.

Via Giphy - Erros em ambiente de testes

Então, caso você ainda não tenha percebido esta necessidade, peço que pare a leitura aqui e vá configurar um ambiente de desenvolvimento para você, hehe. Afinal, esta prevenção pode evitar que você faça algo desastroso no final.

É muito comum desenvolvedores autônomos e individuais trabalharem em ambientes locais de desenvolvimento. Esta é uma opção barata e já garante grande autonomia para que você possa errar até acertar em cheio. Mas, em uma equipe grande e/ou que trabalhe remoto, como garantir as configurações ideais para que cada desenvolvedor consiga trabalhar e compartilhar seus códigos com toda equipe?

Ambiente de desenvolvimento em nuvem

Respondendo ao parágrafo anterior, um ambiente de desenvolvimento em nuvem é uma opção que foi adotada por diversas equipes. Pelo seu caráter instável, o ambiente de desenvolvimento exige das equipes necessidades muito variáveis de recursos, dependendo do ciclo de desenvolvimento das mesmas. Assim, uma solução em cloud computing se adapta bem fornecendo recursos sob medida para a necessidade atual. E quando esta necessidade acabar é possível reajustar cada recurso de volta para a nova necessidade.

Além disto, com a infraestrutura em nuvem é bem mais fácil de padronizar as configurações do ambiente.  E com um ambiente padrão seus desenvolvedores não terão surpresas de incompatibilidades durante esta etapa. Imagine manter padronizada as configurações de desenvolvimento de cada servidor local em uma equipe de 50 colaboradores que trabalham remoto.

Aqui na DialHost, por exemplo, temos um ambiente de desenvolvimento enxuto para que a equipe inicie qualquer projeto ou feature. E sempre que necessário reescalamos os recursos para um novo projeto. Além disto, ao vermos a necessidade, podemos reduzir nossos recursos caso eles estejam ociosos. Isto tudo é possível graças a estrutura que montamos para o DialCloud +

Ambiente de testes em nuvem

Durante todo o processo de desenvolvimento os testes são parte integrante. Cada item, cada funcionalidade deve ser testada em diversos aspectos. Claro que de acordo com a complexidade alcançada em cada empresa, este processo pode ser mais dividido ou ser um simples teste de usabilidade com o usuário final.

O fato aqui é que o ambiente de testes proporciona que seus testes mantenham a segurança dos dados que já estão em produção. Assim tudo que foi desenvolvido pode ser colocado a prova.

Neste ponto a escalabilidade da estrutura em cloud computing se torna ainda mais eficiente. Afinal, testes são frequentes mas, sempre possuem um ponto final para que sejam coletados os resultados e assim passemos para a correção dos problemas encontrados.

Com a escalabilidade podemos subir uma nova instância apenas as configurações necessárias. Ao final  da análise dos testes é possível finalizar a instância reduzindo assim seu custo operacional novamente.

Por fim, ao utilizar esta estrutura para testes, podemos simular funcionalidades avançadas, ainda na fase de testes. Exemplo disso seria a necessidade de balancear cargas após identificar algum gargalo durante um teste de carga.

Vantagens

  • Melhor custo e flexibilidade de recursos para o desenvolvimento do projeto
  • Melhor controle nas configurações padrões de cada ambiente para cada desenvolvedor
  • Facilidade na padronização das configurações de desenvolvimento, teste  e produção
  • Possibilidade de testar diferentes configurações, recursos e cargas
  • Possibilidade de utilizar serviços avançados que requerem tecnologias ou competências que não estão disponíveis em sua estrutura interna
  • No caso de uma equipe grande é possível reduzir bem o custo com infraestruturas nestes ambientes.

Desvantagens

  • Você dependerá sempre de uma conexão com a internet
  • Apesar de pequena a chance (Considerando bons data centers), é preciso pensar em uma solução para caso a nuvem falhe.
  • Ainda é necessário se preocupar com estratégias de backup e recuperação e possíveis perdas de dados durante testes.

Algumas Referências

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.

 

Felipe Moraes
Felipe Moraes

Gerente de desenvolvimento na DialHost, Designer Gráfico formado pela Universidade FUMEC, Minas Gerais e Pós graduando em Branding pelo Centro Universitário UNA, possuo interesse em design de interação e interfaces. Trabalha com programação e criação para web, desde 2006. Apreciador de Bacon, Pudim e music Tag.

Load Balance para meu site

Imagem ilustrativa Load Balance

Imagem ilustrativa Load Balance

No último post da nossa série sobre cloud computing falamos sobre clusters de banco de dados e a utilização de uma camada de load balancing para controlar o fluxo das requisições. Hoje iremos aprofundar mais nesta camada apresentando um pouco sobre a configuração da mesma.

Vamos iniciar esta abordagem com aquele grande momento tão esperado. Seu site sendo visualizado por milhares de pessoas.  Neste mesmo momento vivemos um momento de grande felicidade, acompanhada aquela dor de cabeça. Isto porque, você nota que a estrutura atual do servidor não está suportando a demanda.

Não se preocupe! O Load Balance pode solucionar isto.

Muitos sites possuem milhares de requisições simultâneas e para ajudar nesta atividade o conceito de Load Balance ( balanceamento de carga ) nos ajudará a suportar a demanda das requisições.

O conceito de Load Balance é uma técnica para distribuir a carga de trabalho uniformemente entre duas ou mais instâncias, a fim de otimizar a utilização de recursos, maximizar o desempenho, minimizar o tempo de resposta e evitar sobrecarga.

Uma observação para este projeto é da necessidade da unificação dos arquivos em um única instância e utilizar o NFS ou outra forma, para compartilhar os arquivos com as demais instâncias.

Exemplo de uma estrutura utilizando o NFS

Exemplo de uma estrutura utilizando o NFS

Há diversos softwares que realizam está atividade de Load Balance como por exemplo Nginx, Haproxy, Balance e outros….

Vou ilustrar aqui uma configuração realizada no Haproxy de uma forma bem simples, mas utilizando a ferramenta disponibilizada gratuitamente para todos os clientes DialCloud+ da DialHost

load balancing

Configurando load balancing com DialCloud +

Ao clicar sobre a aba Load Balancing, será visualizada a tela acima:

IP Público: IP no qual sua instância está utilizando para receber as conexões externas.
Nome: Nome para a configuração.
Porta Pública: Porta na qual os clientes estarão utilizando para conectar a sua aplicação para visualizar o seu site. Exemplo: porta 80 HTTP
Porta Privada: Porta do serviço configurado na instância para receber as requisições.

Algorítimos

Round-robin – A cada requisição será redirecionada para uma instância.
Least connections – A instância que possuir um menor numero de conexões estará recebendo a próxima requisição.
Source – O primeiro acesso do IP do Source é enviado a uma instância. Após definido, suas requisições futuras irão para a mesma instância

Simples! Após as informações solicitadas as requisições já estarão sendo direcionadas para as instâncias configuradas.

Espero que tenha ajudado a todos nesta dica de aprimoramento da estrutura para seu site.

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.

 

Márcio Rubens
Márcio Rubens

Sou Analista de TI na DialHost, pós-graduado em Gestão de Segurança da Informação pela PUC-MG e graduado em Gestão da Tecnologia da Informação pela UNI-BH.